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

18

看起来使用原生控件可能是可行的(请参见这里这里),所以现在我正在寻找一些Qt代码来实现它。

5个回答

20

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

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

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

20

我成功地在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();

1
这在Qt5中不再起作用。QWidget显示在第一个屏幕上。 - fdermishin
2
已确认在Qt5上无法工作。设置全屏后移动窗口似乎可以正常工作。 - eozgonul
我认为这段代码的问题在于屏幕大小可能会有所不同,因此仅仅通过将完整分辨率除以屏幕数量进行计算是一种赌博,取决于您的屏幕分辨率。 - Mr. Developerdude

6

我的看法是:

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

  setGeometry(desktop->screenGeometry(1));

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

5

先调用showFullScreen,然后设置setGeometry。

在Qt5中测试通过。


您介意提供一份代码示例吗?这将使您的答案更有价值。 - Simon MᶜKenzie
实际上这并不起作用,当您调用setGeometry时,WindowState会被还原为NoState。 - eozgonul

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接