【问题标题】:How to show QLabel on extended monitor如何在扩展显示器上显示 QLabel
【发布时间】:2018-10-08 13:49:32
【问题描述】:

我有一个非常简单的 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++ qt qtgui


    【解决方案1】:

    你需要:

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

    【讨论】:

      【解决方案2】:

      此示例不会为我“编译”,但可以尝试类似的方法 - 设置坐标

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

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

      【讨论】:

      • 应用程序正在主监视器上运行,消息/标签应出现在辅助监视器上。我会测试你的建议
      • 不.. 它不适合我。我的意思是它显示标签,但标签在主监视器上
      猜你喜欢
      • 2016-05-29
      • 2017-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-05
      相关资源
      最近更新 更多