我有几个可停靠的小部件,用户可以将它移动到屏幕上的任何位置。有时,如果用户将其拖出可视区域,则无法将其拉回来。
有什么方法可以将 Qt 中的小部件位置恢复到默认位置?
您可以使用QMainWindow::saveState()
和QMainWindow::restoreState()
方法。
saveState
返回一个QByteArray
包含主窗口的内部状态,包括停靠区的停靠小部件的状态和位置。例如,您可以将此数组保存在文件中,稍后通过调用restoreState()
.
如果你想有一个默认位置,然后默认放置你喜欢的停靠小部件,检索字节数组(例如,通过一些仅在应用程序的调试模式下可用的操作),将数组硬编码到您的源代码或一些默认配置文件,然后通过简单地将这个数组传递给restoreState()
方法来实现某种“重置”或“设置默认值”操作。
将小部件位置存储在注册表中。在安装时进行默认设置并保存屏幕几何图形。例如:
QSettings settings;
settings.beginGroup("MainWindow");
settings.setValue("MRU", m_RecentFiles);
settings.setValue("maximized", isMaximized());
settings.setValue("minimized", isMinimized());
if(!isMaximized())
{
settings.setValue("size", size());
}
QByteArray array = saveState();
settings.setValue("state", array);
QDesktopWidget desktopWidget;
int nb = desktopWidget.numScreens();
settings.setValue("screenNumber", nb);
for(int i = 0; i < nb; ++i)
{
YString screenName = "screen" + YString::number(i);
QRect rect = desktopWidget.screenGeometry(i);
settings.setValue(screenName.data(), rect);
}
通常,您只需在mouseMoveEvent中添加一个检查来测试 QWidgets 的位置,然后决定我们是否需要将小部件移回屏幕上。