如何从保存的几何图形中获取屏幕编号?
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);
}
为了恢复最后的 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);
}