将可停靠的小部件置于Qt中的默认位置

时间:2013-05-16 12:27:38

标签: qt

我有几个可停靠的小部件,用户可以将其移动到屏幕中的任何位置。 有时,如果用户拖出可视区域,则无法将其恢复。

有没有办法将Qt中的窗口小部件位置恢复到默认位置?

3 个答案:

答案 0 :(得分:1)

您可以使用QMainWindow::saveState()QMainWindow::restoreState()方法。

saveState返回一个QByteArray,其中包含主窗口的内部状态,包括停靠区域的停靠窗口小部件的状态和位置。例如,您可以将此数组保存在文件中,稍后通过调用restoreState()来恢复内容。

如果你想拥有一个默认位置,那么你可以根据需要定位Dock小部件,默认情况下,检索字节数组(例如通过一些仅在应用程序的调试模式下可用的操作),放置数组硬编码到您的源代码或某个默认配置文件中,然后通过简单地将此数组传递给restoreState()方法来实现某种“重置”或“设置默认值”操作。

答案 1 :(得分:1)

将Widget位置存储在Registry中。安装时具有默认设置并保存屏幕几何图形。例如:

   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);
   }

答案 2 :(得分:0)

通常,您只需在检查QWidgets位置的mouseMoveEvent中添加一个检查,然后决定是否需要将小部件移回屏幕。