2

Pyside を使用していますが、一般的な Qt の質問:

QMainWindow を制御する Qt アプリを構築しています。このウィンドウから、ユーザーは他の QMainWindows (または QDialogs) を開くことができ、それらの一部からさらに開くことができます。ユーザーは、最初の QMainWindow を「アプリ」と見なし、他のものを多かれ少なかれ同じデータのさまざまなビューと見なすことを意図しています。

したがって、ユーザーが自分の要件に合わせて画面を設定できるように、すべてのウィンドウを個別に積み重ねることができるようにしたいと考えています。特に、必要に応じて、ユーザーが最初の QMainWindow を一番上に表示できるようにしたいと考えています。しかし、私は各ウィンドウに独自のタスク バー エントリを持たせたくありません (それは許容できますが)。また、それらをまとめて最小化して復元し、最初のメイン ウィンドウが閉じたときにすべて閉じるようにしたいと考えています。

最初のメインウィンドウでそれらすべてを親にする場合、それらがその上にとどまることを除いてうまく機能しますが、これは私が望んでいるものではありません。

代わりに、parent = None を使用してすべてを独立させることで、一種の作業を行います。次に、それらをすべてメイン ウィンドウに登録し、閉じるときにすべて閉じます。しかし、これは少し独立しすぎています。個別に最小化され、独自のタスク バー エントリがあります。

これに対する明らかな修正が欠けていますか?子が親の上にとどまるのを止める簡単な方法(フラグ?)はありますか?

または、これを望んで破っているUIガイドラインはありますか?

それとも、どういうわけかすっきりとしたデザインがありますか?ダミーの親を追加して、それらすべてが子孫になる可能性があると考えましたが、面倒かもしれません。その親は視覚的な存在を必要としますか? 私はそれをしたくありません。

提案?

4

2 に答える 2

1

必要な数のQMainWindows、または親のないQWidgetを使用できます。あなたの状況を処理する最良の方法は、次のような独自の疑似親子関係を作成することだと思います。

QMainWindowサブクラスに、管理するすべてのQWidgetのQListを格納します。次に、再びQMainWindowサブクラスで、 (ウィンドウが最小化されたとき)、QWidget::closeEvent()(ウィンドウが復元されたとき)などのメソッドを再実装して、QList内のすべてのウィジェットを閉じたり、非表示にしたり、表示したりします。QMainWindowサブクラスのデストラクタでもそれらを確認してください。これで、サブウィンドウを作成するときはいつでも、メインウィンドウへのポインタを通常のQWidgetの子としてではなく、メインウィンドウのQWidgetのQListに追加して管理できるようにすることができます。例えば:QWidget::hideEvent()QWidget::showEvent()delete

MainWindowSubclass::addPseudoChild(QWidget *pseudoChild)
{
    myListOfPseudoChildren.append(pseudoChild);
}

まだ言及されていない別の代替手段は、QMdiAreaQMdiSubWindowsを設定することです。それはあなたが要求したことを正確には行いませんが、それでもかなりきれいなデザインです。

于 2012-05-20T16:18:58.190 に答える