在2个屏幕上正确放置QT启动屏幕

时间:2013-08-21 07:56:52

标签: qt window splash-screen

我在启动时的应用程序创建了一个“Splash Screen”,其中包含Open,New等快速访问按钮......此启动窗口位于屏幕中间,应用程序主窗口位于其后面。

以下是执行此操作的代码:

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();
}

但是,当应用程序在双显示器设置上运行时,我遇到了一些问题。会发生以下情况:无论应用程序何处启动,Splash屏幕始终在第一个屏幕上创建。因此,如果Window管理器决定在第二个屏幕上打开应用程序,那么启动画面将在第一个屏幕的中间很远......这非常难看:(

知道如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

尝试不使用小部件作为参数调用availableGeometry(),而是使用屏幕编号。像

这样的东西
int screen = d->primaryScreen();
QRect t = d->availableGeometry(screen);

答案 1 :(得分:1)

如果您将初始屏幕作为子项添加到MainWindow,则应将其初始坐标设置为显示在其父级之上。