Как показать QLabel на расширенном мониторе - PullRequest
0 голосов
/ 27 апреля 2018

У меня очень простое приложение на 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 голосов
/ 29 апреля 2018

Вам необходимо:

  1. Убедитесь, что окно на виртуальном рабочем столе принадлежит экрану.

  2. Что это где-то на данном экране.

* * 1012 Таким образом: * * 1013
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());
}
0 голосов
/ 27 апреля 2018

Этот пример не "компилируется" для меня, но попробуйте что-то вроде этого - установите координаты

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

Примечание: вопрос в том, какой из ваших мониторов первый, а какой последний ...

...