使用Qt实现多屏显示

3

我希望在我的Ubuntu 14.04电脑上有一个Qt应用程序,可以在不同的显示输出(屏幕)上显示两个窗口。有谁知道怎么做?

目前我能找到的是Qt嵌入式Linux的文档,但对我并没有太大帮助。

编辑:根据您的评论,我已经尝试了这个方法,但它没有按照预期运行:

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(),虽然我没有使用过,但可能适合你的目的。 - HostileFork says dont trust SE
2个回答

6

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

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函数。

P.S.可能会有一些小的错别字,因为我是凭记忆编写这段代码的,但主要思路应该很清楚了。


移动函数属于哪个类? - OnurA
在你的情况下,使用QQuickView的move函数。例如:view1.move(screen1->geometry().x(),screen1->geometry().y()); - johngull
它没有移动函数吗?你能在Qt 5文档中找到它吗? - OnurA
@OnurA,你是对的。混淆了QtWidget类。 - johngull
1
@OnurA,如果您要调用showFullScreen,则需要使用setScreen。可能在其他情况下也很重要,但这是我遇到的唯一情况。 - johngull
显示剩余3条评论

1

这个链接与此相关吗? - IAmInPLS

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