使用 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
。
附:这段代码是凭记忆写的,可能有一些小错别字,但大意你应该很清楚。
【讨论】:
移动哪个类的函数? @OnurAmove
QQuickView 在您的情况下的功能。喜欢view1.move(screen1->geometry().x(),screen1->geometry().y());
没有移动功能?你能从 Qt 5 文档中找到它吗?
@OnurA,你是对的。与 QtWidget 类混在一起。
@OnurA,如果你打电话给showFullScreen
,你需要setScreen
。可能在其他一些情况下它很重要,但这只是我面临的一个。【参考方案2】:
我建议你看看this question 和this answer on another question。另请参阅QDesktopWidget 的文档。希望对您有所帮助!
【讨论】:
this 相关吗?以上是关于使用 Qt 的多个屏幕的主要内容,如果未能解决你的问题,请参考以下文章