首页 > 解决方案 > 如何在扩展显示器上显示 QLabel

问题描述

我有非常简单的 qt 应用程序。我的目标是,如果我点击一个按钮,它应该在我的第二个/扩展显示器上显示消息。我的应用程序将在主监视器上运行,并且显示消息应出现在第二个监视器上。这就是我的方法的样子:

void MainWindow::on_pushButton_clicked()
{
   QLabel *ql = new QLabel();
   ql->setText("Order is Ready");
   ql->move(QGuiApplication::screens().last()->geometry());
   ql->show();
  .....
}

但这对我不起作用。我也尝试过但也没有工作:(任何帮助将不胜感激?

ql->windowHandle()->setScreen(QGuiApplication::screens().last());

标签: c++qtqtgui

解决方案


你需要:

  1. 确保窗口位于屏幕所属的虚拟桌面上。

  2. 它在给定屏幕上的某个地方。

因此:

void centerWidgetOnScreen(QWidget *widget, QScreen *screen) {
  auto *window = widget->windowHandle();
  Q_ASSERT(screen);
  Q_ASSERT(window);
  window->setScreen(screen);
  auto newCenter = screen->geometry().center();
  auto rect = window->geometry();
  rect.moveCenter(newCenter);
  window->setGeometry(rect);
}

void centerWidgetOnLastScreen(QWidget *widget) {
  centerWidgetOnScreen(widget, QGuiApplication::screens().last());
}

推荐阅读