状況:アプリケーションの中心的なウィジェットとして、タブモードのQMdiAreaがあります( QMdiAreaから継承したカスタムクラスにラップされています)。QMdiSubWindowを介して最初の QMdiSubWindow を追加してaddSubWindow()
も問題ありません。つまり、ウィンドウとその内容が最大化されて、QMdiAreaのすべてのスペースが占有されます。ただし、2 番目のサブ ウィンドウを追加するとすぐに、次の問題が発生します。
問題: 2 番目のウィンドウのコンテンツが表示されず、最初のウィンドウのコンテンツが表示され続けますが (2 番目のタブに視覚的にフォーカスがあるにもかかわらず)、サイズが縮小されます。数ピクセルしか占有しません。しかし、最初のサブウィンドウ/タブに戻って (サイズが縮小されたウィジェットをクリックして自動的に最大サイズに戻るか、最初のタブヘッダーを選択して) 2 番目をもう一度選択すると、すべて問題ありません = 2 番目のタブのウィジェット/エディターが表示され、最大化されます。
ただし、2 番目のタブを閉じるまでは、最初のタブのコンテンツが (予想どおり) 表示されますが、小さいサイズでしか表示されません!
スクリーンショット:
別の関連するテスト ケース: 最初のタブが作成され、期待どおりにフル サイズで表示されます。QMainWindow全体のサイズを単純に変更すると、タブのウィジェットの周りに突然かすかな境界線が表示されます。そのため、境界のある最大化モードと通常モードが混在した状態にあるように見えます。それは新しいリードを生み出しますか?
スクリーンショット:
私はこれまで明示的に定義されたレイアウトを使用していませんが、最初のタブが正常に機能し、手動で前後に切り替えた後に他のすべてのタブも同様に機能することを考えると、それがなくても機能するはずです.
明示的なレイアウト オブジェクトを設定する必要がありますか? 最初のタブでは機能するのに、2 番目のタブでは機能しないのはなぜですか?
ベースとしてのコード: これは、新しい子の追加を処理するカスタムQMdiAreaクラスで実行されるロジックです。
// Note: pEditor inherits from / is a QMdiSubWindow itself
if(!pEditor->isInitialized())
{
pEditor->initialize();
pEditor->setWidget(pEditor->getEditorWidget());
pEditor->setInitialized(true);
}
pEditor->beforeDisplay();
addSubWindow(pEditor);
pEditor->showMaximized();
// HACK START
pExisting = subWindowList().at(0);
if(pExisting)
setActiveSubWindow(pExisting);
// HACK END
更新: N1ghtLight によって提案されたハックを追加しました。コーディングでそのようにマークされています。
更新 2:問題の説明を編集/修正 + スクリーンショット付きの新しいテスト ケース。