3

我有一个我没有设置的QMdiArea对象,但如下所述。QMainWindowsetCentralWidget()

MainWindow::createMdiArea() {
    QMdiArea mdiArea = new QMdiArea(this)
    mdiArea.setGeometry(0,0,1024,600);
    mdiArea.show(); 
}

我不想将其设置QMdiArea为中心小部件。现在我在里面创建了一些子窗口QMdiArea,如下

MainWindow::createChildWindow()
{
     HelpWindow child1 = new HelpWindow(). // HelpWindow is a very simple class derived from QWidget and containing one QLineEdit. 
     mdiArea.addSubWindow(&child1);

     // Set the geometry of Child widget.
     child1.parentWidget()->setGeometry(0,0,400,100); // Setting geometry which I have saved.
     child1.show();
}

到目前为止,一切都很好。但问题是在子窗口调整大小/关闭事件中我需要保存的大小,HelpWindow并且我正在执行以下操作以在其调整大小/关闭事件中保存子窗口的大小。

     saveHelpWindowSize(size());
     saveHelpWindowPos(pos());

好的。问题来了。我从size()子窗口内的函数获得的大小与我在函数中使用的大小不同setGeometry(),即使我在调整大小事件(即关闭事件)以外的其他方法中看到它。

所以,假设第一次创建子窗口的大小(使用 setGeometry)400、200,当我关闭这个窗口时,我将从中获得的大小HelpWindow::size()可能会说(385, 190)我将保存,下一次setGeometry()将从中获得这个大小设置,此时在关闭事件中我会得到更小的尺寸,最终我的子窗口将具有 size (0, 0)

1:关于如何同步这两种尺寸的任何想法(即,如果子小部件由setGeometry()函数设置的大小和我从小部件的size()功能获得的小部件的大小)

2:另一个问题,我在子小部件(HelpWindow)类中接收resizeEvent / closeEvent事件等,但是当我将子窗口移动到里面时我没有收到moveEvent,QMdiArea我收到这个事件的唯一时间是我最大化里面的子窗口QMdiArea(我不会这样做)。所以当它的位置改变时,我需要保存我的子窗口的位置。我该怎么做?

4

0 回答 0