1

アプリケーションの起動時に、開く、新規などへのクイック アクセス ボタンを備えた一種の「スプラッシュ スクリーン」が作成されます。このスプラッシュ ウィンドウは画面の中央に配置され、アプリケーションのメイン ウィンドウはその背後に配置されます。

これを行うコードは次のとおりです。

void MainWindowButtonDialog::showMe()
{
    setModal(false);
    setWindowFlags(
        #ifdef Q_WS_WIN
            Qt::SplashScreen |
        #endif
            Qt::CustomizeWindowHint | Qt::WindowStaysOnTopHint);

    QDesktopWidget *d = QApplication::desktop();
    QRect t = d->availableGeometry(this);
    move(mapToGlobal(this->geometry().topLeft()).x() + t.center().x() - width() / 2, 
         t.center().y()- height() / 2);
    show();
    raise();
}

ただし、アプリケーションを 2 つのモニター設定で実行すると、いくつかの問題が発生します。何が起こるかは次のとおりです。スプラッシュ画面は、アプリケーションの開始場所に関係なく、常に最初の画面に作成されます。そのため、ウィンドウ マネージャが 2 番目の画面でアプリケーションを開くことにした場合、スプラッシュ スクリーンは最初の画面の中央から遠く離れた場所に表示されます...これはかなり醜いです :(

これをどのように修正できますか?

4

2 に答える 2

1

パラメーターとしてウィジェットを使用するのではなく、画面番号を使用して availableGeometry() を呼び出してみてください。何かのようなもの

int screen = d->primaryScreen();
QRect t = d->availableGeometry(screen);
于 2013-08-21T09:23:31.657 に答える