【问题标题】:Correctly Placing a QT Splash Screen on 2 screens在 2 个屏幕上正确放置 QT 启动画面
【发布时间】:2013-08-21 07:56:51
【问题描述】:

我的应用程序在启动时会创建一种“启动画面”,其中包含打开、新建等快速访问按钮...这个启动窗口位于屏幕中间,应用程序主窗口位于其后面.

这是执行此操作的代码:

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

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

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

【问题讨论】:

  • “启动画面的种类” - 你没有使用 QSplashScreen 小部件吗?
  • 不,只是显示一个“顶级”窗口,因为我还希望应用程序主窗口在“启动画面”存在时可以访问,并且在主窗口的第一个有意义的操作时启动消失。
  • 窗口是主窗口的子窗口,还是独立的?
  • @Merlin069 这是一个独立的窗口
  • 你可以添加它作为一个孩子吗?

标签: qt window splash-screen


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    int screen = d->primaryScreen();
    QRect t = d->availableGeometry(screen);
    

    【讨论】:

    • 不,现在弹出窗口总是在主屏幕上弹出,无论主窗口是否显示在第二个屏幕上。
    猜你喜欢
    • 1970-01-01
    • 2011-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多