2013-06-10 7 views
7

Qt Designerについてわからないことがあります。私はしばらくそれを使用してきましたが、私はいつも手動で.uiファイルを編集していました。例えば、closeEvent()機能をキャッチし、再定義するために - それはにQtの上のすべての単一チュートリアル、あなたはGUIを作成するときにあなたが非常に最初のものの一つがQMainWindowをサブクラス化することであると見ることができるようにQt DesignerはQMainWindowを宣伝できません

しかし、QMainWindowをQtデザイナーでサブクラス化(プロモート)することはできません。他の多くのクラスではできますが、これはできません。

私は通常行うことは.uiファイルと変更編集している:私のコードは私のコードで正しくQMainWindowをサブクラスできるようにするため

< widget class="MyMainWindow" name="MainWindow"> 

:によって

<class>MainWindow</class> 
    <widget class="QMainWindow" name="MainWindow"> 

class MyMainWindow(QMainWindow, object): 
    ''' I can redefine closeEvent here! ''' 

明らかに、これは不思議です。デザイナーとの正しいやり方については何か不明です。しかし、私は説明を見つけることができません。

QMainWindowをDesignerでサブクラス化することができないのはなぜですか、またはそれを必要としないようにアプリケーションの構造を変更するのはなぜですか?

おかげ

答えて

4

あなたは、一般的にUIツリーのルート要素を促進する必要はありません。 UIファイルを使用してクラスを適切に初期化する場合は、closeEventを再定義することができます。 This answerは正しく行う方法を示しています。

+0

ありがとうございました。しかし、これは、誰かが同じ問題を抱えていて、それを回避するためにハックを作成したことを示しています。これがピサイドのバグかどうかは今私には分かりません。 Qt/C++またはPyQtを使用する場合、Uiファイルのトップレベルクラスのインスタンス内からload()を呼び出すと、ロードされたウィジェットが現在のインスタンスに直接マップされますか?これは、QUiLoaderのドキュメントではこのようにはっきりと説明されていません。まだ困惑している。 –

2

私はこれが古いことを知っています。私は何とか同じ問題に遭遇しました。サブウインドウでドッキング機能を使いたい私がQMinWindowを宣伝しようとしたとき、リストには表示されません。それからQWidgetをドロップダウンリストで使ってみました。

私の経験。