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

Ok。ここに問題があります。子ウィンドウ内の関数から取得したサイズは、size()関数で使用したサイズとは異なりますsetGeometry()。サイズ変更イベント(つまり、Closeイベント)以外の方法で表示された場合でも同様です。

したがって、子ウィンドウが(setGeometryを使用して)400、200のサイズで初めて作成されたときに、このウィンドウを閉じるときに、取得するサイズがどちらを保存するHelpWindow::size()(385, 190)を示し、次回setGeometry()はこのサイズを取得するとします。設定、そしてこの時点でクローズイベントで私はより小さなサイズになり、最終的に私の子ウィンドウのサイズはになります(0, 0)

1:これらの両方のサイズを同期する方法についての考え(つまり、子ウィジェットがsetGeometry()関数によって設定されている場合のサイズと、ウィジェットの関数から取得しているウィジェットのサイズsize()

2:別の質問です。子ウィジェット()クラスでresizeEvent / closeEventイベントなどを受信して​​いHelpWindowますが、子ウィンドウを内部に移動してもmoveEventを取得していません。QMdiAreaこのイベントを受信するのは、内部の子ウィンドウを最大化したときだけです。QMdiArea(私はしません)。そのため、子ウィンドウの位置が変更されたときに、その位置を保存する必要があります。どうすればいいですか?

4

0 に答える 0