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

但是,当应用程序在两个监视器设置上运行时,我遇到了一些问题。发生的情况如下:无论应用程序从何处启动,启动画面总是在第一个屏幕上创建。因此,如果窗口管理器决定在第二个屏幕上打开应用程序,则启动屏幕将在第一个屏幕的中间很远......这很丑:(

知道如何解决这个问题吗?

4

2 回答 2

1

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

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

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

于 2013-08-21T09:49:36.330 回答