如何从保存的几何图形中获取屏幕编号?

How to get screen number from saved geometry?

为了恢复最后的 window 几何形状和状态,我使用的代码类似于 this Qt document:

中建议的代码
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基本上是几何图形、屏幕编号和window状态的序列化。

现在,应用程序在启动期间显示启动画面。我想在显示应用程序 window 的同一个监视器中显示这样的启动画面。我可以根据 QScreen geometry 设置启动画面几何图形,但我需要屏幕编号来完成此代码:

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

如何从保存的几何图形中只获取屏幕编号?

我已经能够解决创建假 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);
}