2016-10-04 9 views
1

私たちの先生の一人は、メインウィンドウ(QMainWindow)のUIファイルなしでQtアプリケーションを作成するよう依頼しました。通常は常に1つ作成し、空のままにしてuicを処理します。Qt5 QMainWindowコンポーネントの削除

ウィジェット(子)とその親の間に親の関係が定義されている場合、そのウィジェットを削除する必要はありません(親が削除されると削除されます)。したがって、UIが削除されると、すべての子が破棄されます。

UIファイル(生成されていない)を使用しない場合、GUIに追加されたすべてのウィジェットを手動で削除する必要がありますか?

少しサンプル:

MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent){ 
    layout = new QHBoxLayout(this); 
    aButton = new QButton(this); 
    layout->addWidget(aButton); 
    ... 
} 

MainWindow::~MainWindow(){ 
    delete ui; // No need to delete more if parental relation. 
    // However, what do we do if no ui has been generated? 
    // Do we have to delete aButton? 
} 

親の値は、アプリケーションのメインエントリは0です。

おかげ

+0

実際にあなたが求めているものは不明ですが、 'ui'は' nullptr'です。 'delete ui;'はNOPです。だからそれはうまくいくようです。 –

+0

さて、自動生成されたuiファイルがないと、私たちがしなければならないことについて尋ねていました。各ウィジェットを手動で削除する必要がありますか? – Papipone

+1

***各ウィジェットを手動で削除する必要がありますか?***いいえ。ウィジェットは親ウィジェットの子である必要があります。 QObjectは、親が削除されたときにそれらを処理します。 – drescherjm

答えて

3

this article

のQWidget、Qtのウィジェットモジュールの基本的なクラスを参照してください、親子関係を拡張します。子は通常、子ウィジェットになります。つまり、親の座標系に表示され、親の境界によってグラフィカルにクリップされます。たとえば、アプリケーションが閉じられた後にメッセージボックスを削除すると、ボタンとラベルがメッセージボックスの子であるため、メッセージボックスのボタンとラベルも同様に削除されます。

だから、uiを使用しても違いはありません。ウィンドウを削除すると、その子もすべて削除されます。

関連する問題