使用 Qt 的多个屏幕

Posted

技术标签:

【中文标题】使用 Qt 的多个屏幕【英文标题】:Multiple Screens with Qt 【发布时间】:2016-04-07 11:19:02 【问题描述】:

我想要一个 Qt 应用程序在我的 Ubuntu 14.04 计算机上的不同显示输出(屏幕)上显示两个窗口。有人知道怎么做吗?

Qt for Embedded linux 的documentation 是我目前能找到的,但它并没有真正帮助我。

编辑: 根据您的 cmets,我已经完成了此操作,但它无法正常工作:

int main(int argc, char *argv[])

  QGuiApplication app(argc, argv);
  QQuickView view1(QUrl(QStringLiteral("qrc:/Screen1.qml")));
  qDebug() << app.screens().length();

  QScreen* screen1 = app.screens().at(0);
  QScreen* screen2 = app.screens().at(1);

  view1.setGeometry(0,0,200,200);
  view1.setScreen(screen1);
  view1.show();

  QQuickView view2(QUrl(QStringLiteral("qrc:/Screen2.qml")));
  view2.setGeometry(0,0,200,200);
  view2.setScreen(screen2);
  view2.show();

  return app.exec();

调试输出为:2

尽管qDebug 输出给出了正确名称的正确数量的显示输出,但此代码将两个视图置于相同的显示输出中。

【问题讨论】:

如果您使用的是 Ubuntu,为什么要阅读嵌入式 linux 文档? :-/ 在常规的 Qt5 文档中,您会找到 QScreen 和 QWindow::setScreen()... 我没有使用过但可能适合您的目的。 【参考方案1】:

您的错误是错误的几何形状。在这两行代码中,您将两个窗口放在同一位置:

view1.setGeometry(0,0,200,200);
view2.setGeometry(0,0,200,200);

除此之外,您可以设置位置(不确定是否还需要尺寸):

view1.setGeometry(screen1->geometry().x(),screen1->geometry().y(),200,200);
view2.setGeometry(screen2->geometry().x(),screen2->geometry().y(),200,200);

要改变位置而不是同时改变位置和大小,可以使用函数move

附:这段代码是凭记忆写的,可能有一些小错别字,但大意你应该很清楚。

【讨论】:

移动哪个类的函数? @OnurA move QQuickView 在您的情况下的功能。喜欢view1.move(screen1-&gt;geometry().x(),screen1-&gt;geometry().y()); 没有移动功能?你能从 Qt 5 文档中找到它吗? @OnurA,你是对的。与 QtWidget 类混在一起。 @OnurA,如果你打电话给showFullScreen,你需要setScreen。可能在其他一些情况下它很重要,但这只是我面临的一个。【参考方案2】:

我建议你看看this question 和this answer on another question。另请参阅QDesktopWidget 的文档。希望对您有所帮助!

【讨论】:

this 相关吗?

以上是关于使用 Qt 的多个屏幕的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Qt 获取屏幕尺寸?

使用 QT 平滑屏幕过渡

如何使用 Qt 在屏幕上绘制选择矩形?

Qt 如何枚举屏幕?

Qt移动应用开发:适配不同的屏幕

使用 Qt creator 编写屏幕保护程序 - 在屏幕保护程序设置中显示预览