Как получить номер экрана из сохраненной геометрии? - PullRequest
1 голос
/ 04 октября 2019

Чтобы восстановить геометрию и состояние последнего окна, я использую код, аналогичный тому, который был предложен в этом документе Qt :

void MainWindow::closeEvent(QCloseEvent *event)
{
  QSettings settings("MyCompany", "MyApp");
  settings.setValue("geometry", saveGeometry());
  QMainWindow::closeEvent(event);
}

void MainWindow::readSettings()
{
  QSettings settings("MyCompany", "MyApp");
  restoreGeometry(settings.value("geometry").toByteArray());
}

Просмотр исходного кода Qt (qwidget.cpp), QWidget::saveGeometry и его брат restoreGeometry в основном представляют собой сериализацию геометрии, номера экрана и состояния окна.

Теперь приложение отображает заставку во время запуска,Я бы хотел показать такой экран-заставку на том же мониторе, где будет отображаться окно приложения. Я могу установить геометрию заставки на основе QScreen геометрия , но мне нужен номер экрана для завершения этого кода:

const auto screens = qApp->screens();
const auto geometry = screens[/* screen number here */]->geometry();

Как получить только номер экрана из сохраненногогеометрия?

1 Ответ

1 голос
/ 04 октября 2019

Я смог решить проблему, создав фальшивый QWidget (никогда не показывался), восстановив его геометрию и используя QDesktopWidget::screenNumber, чтобы получить монитор там, где ондолжно быть:

int MainWindow::getMonitorToShowSplashScreen() const
{
  QSettings settings("MyCompany", "MyApp");

  QWidget fake_widget;
  fake_widget.restoreGeometry(settings.value("geometry").toByteArray());

  return qApp->desktop()->screenNumber(&fake_widget);
}
...