如何在扩展监视器上显示QLabel

时间:2018-04-27 16:57:58

标签: c++ qt qtgui

我有非常简单的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());

2 个答案:

答案 0 :(得分:1)

此示例不为我“编译”,但尝试这样的事情 - 设置坐标

ql->move(QGuiApplication::screens().last()->geometry().width(), QGuiApplication::screens().last()->geometry().height() / 2);

注意:问题是你的显示器是哪个,哪个是最后一个......

答案 1 :(得分:1)

你需要:

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

  2. 它位于给定屏幕上的某个位置。

  3. 因此:

    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());
    }