【问题标题】:How to get screen number from saved geometry?如何从保存的几何图形中获取屏幕编号?
【发布时间】:2019-10-04 14:46:19
【问题描述】:

为了恢复最后一个窗口的几何形状和状态,我使用了类似于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基本上是几何、屏幕编号和窗口状态的序列化。

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

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

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

【问题讨论】:

    标签: c++ qt splash-screen qwidget


    【解决方案1】:

    我已经能够解决这个问题,创建一个假的 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);
    }
    

    【讨论】:

      猜你喜欢
      • 2011-12-29
      • 2013-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-05
      • 2019-07-14
      相关资源
      最近更新 更多