使用RestoreGeometry()时将QDialog相对于其父对象居中

时间:2012-11-04 01:45:39

标签: qt

我有一个有几个QDialog的程序。大多数是固定大小,但其中一个是可调整大小的编辑器。编辑器对话框从QByteArray恢复其几何体。

我遇到的问题是编辑器正确居中。 (仅限窗口的x / y尺寸)编辑器通常在实例化时出现在左上角。

Editor类在MainWindow中实例化如下:

Editor e(this);
e.exec();

出于某种原因,恢复窗口几何会破坏编辑器相对于其父级的自动居中。在我今天实现SaveGeometry和RestoreGeomentry代码之前,编辑器工作正常。

这是Editor.cpp中的SaveGeometry代码:(它在当前Editor对象被销毁之前执行)

// Remember current window size
QByteArray geo=saveGeometry();
SettingsManager s;
s.SaveEditorSize(geo);

这是Editor.cpp中的恢复代码:(这是设置UI,分配布局等功能的一部分)。

if(!Buffer::editor_geometry.isEmpty()){
    restoreGeometry(Buffer::editor_geometry);
}

有谁知道问题是什么?

编辑:实际上,它确实记得上次的位置,它不会居中。

1 个答案:

答案 0 :(得分:0)

实际上,我认为我已经解决了这个问题。

我没有存储整个窗口几何体,而是尝试将大小存储为QSize。然后在初始化编辑器时通过QDialog :: Resize()重新应用大小。该窗口会记住它以前的大小,而仍然保持居中,就像它应该的那样。