使用 Qt 在辅助监视器上全屏显示窗口

Posted

技术标签:

【中文标题】使用 Qt 在辅助监视器上全屏显示窗口【英文标题】:Display window full screen on secondary monitor using Qt 【发布时间】:2010-07-08 11:37:12 【问题描述】:

似乎可以使用本机控件(请参阅 here 和 here)所以现在我正在寻找一些 Qt 代码来做到这一点。

【问题讨论】:

【参考方案1】:

我在 Windows 和 Linux 上成功使用此代码进行第二次全屏显示

QRect screenres = QApplication::desktop()->screenGeometry(1/*screenNumber*/);
SecondDisplay secondDisplay = new SecondDisplay(); // Use your QWidget
secondDisplay->move(QPoint(screenres.x(), screenres.y()));
secondDisplay->resize(screenres.width(), screenres.height());
secondDisplay->showFullScreen();

【讨论】:

这在 Qt5 中不再有效。 QWidget 显示在第一个屏幕上。 确认不能在 Qt5 上工作。设置全屏后移动窗口似乎可以工作。 我认为此代码的问题在于屏幕尺寸可能会有所不同,因此仅将全分辨率除以屏幕计数是一种赌博,可能取决于您的屏幕分辨率。【参考方案2】:

在 Qt5 中这样做的一种方法是使用QWindow::setScreen 来设置应显示窗口的屏幕。 QWidget 有一个 windowHandle(),它返回指向 QWindow 的指针。

以下是如何以全屏模式在第二个屏幕上显示您的小部件:

QWidget * widget = new QWidget();
widget->show();
widget->windowHandle()->setScreen(qApp->screens()[1]);
widget->showFullScreen();

【讨论】:

【参考方案3】:

我对此的看法:

  auto const desktop(QApplication::desktop());

  setGeometry(desktop->screenGeometry(1));

#ifndef Q_OS_WIN
  setWindowState(Qt::WindowState(Qt::WindowFullScreen | windowState()));
#endif // Q_OS_WIN

【讨论】:

【参考方案4】:

先showFullScreen,然后setGeometry。

Qt5 测试正常

【讨论】:

您介意包含一个代码示例吗?这会让你的答案更有价值。 这实际上不起作用,调用setGeometry时WindowState恢复为NoState。【参考方案5】:

这个问题在使用 window->showFullScreen() 而不是 window->show() 时得到了解决。

【讨论】:

以上是关于使用 Qt 在辅助监视器上全屏显示窗口的主要内容,如果未能解决你的问题,请参考以下文章

在第二个屏幕上显示对话框/帧全屏唱 QT/c++

如何在视图控制器中的标签栏和导航栏上全屏显示弹出视图?

如何让导航栏在一行上全屏显示以及设置百分比让其居中显示

模态 UIViewController 总是在 iPad 上全屏显示。为啥?

Qt如何全屏显示图片

Qt中子窗口全屏显示与退出全屏