設定していないオブジェクトQMdiArea
がありますが、以下のとおりです。QMainWindow
setCentralWidget()
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());
Ok。ここに問題があります。子ウィンドウ内の関数から取得したサイズは、size()
関数で使用したサイズとは異なりますsetGeometry()
。サイズ変更イベント(つまり、Closeイベント)以外の方法で表示された場合でも同様です。
したがって、子ウィンドウが(setGeometryを使用して)400、200のサイズで初めて作成されたときに、このウィンドウを閉じるときに、取得するサイズがどちらを保存するHelpWindow::size()
か(385, 190)
を示し、次回setGeometry()
はこのサイズを取得するとします。設定、そしてこの時点でクローズイベントで私はより小さなサイズになり、最終的に私の子ウィンドウのサイズはになります(0, 0)
。
1:これらの両方のサイズを同期する方法についての考え(つまり、子ウィジェットがsetGeometry()
関数によって設定されている場合のサイズと、ウィジェットの関数から取得しているウィジェットのサイズsize()
)
2:別の質問です。子ウィジェット()クラスでresizeEvent / closeEventイベントなどを受信していHelpWindow
ますが、子ウィンドウを内部に移動してもmoveEventを取得していません。QMdiArea
このイベントを受信するのは、内部の子ウィンドウを最大化したときだけです。QMdiArea
(私はしません)。そのため、子ウィンドウの位置が変更されたときに、その位置を保存する必要があります。どうすればいいですか?