2016-09-09 150 views
5

押しボタンやウィジェットのhide、close、showの違いは何ですか?qtのhide、close、showの違い

もう一度ウィジェットを使いたくない方が良いですか?

+0

これらのスロットのマニュアルをお読みになりましたか? – Hayt

答えて

0

Qtによると、あなたはこれを読むことができます:

CLOSE: は、このウィジェットを閉じます。ウィジェットが閉じられた場合はtrueを返します。それ以外の場合は がfalseを返します。

まず、ウィジェットにQCloseEventを送信します。 がcloseイベントを受け入れる場合、ウィジェットは非表示になります。イベントを無視すると何も起こりません。 QWidget :: closeEvent()のデフォルトの実装では、閉じる イベントを受け入れます。

ウィジェットにQt :: WA_DeleteOnCloseフラグが設定されている場合、そのウィジェットも削除されます( )。 ウィジェットが表示されているかどうかに関係なく、閉じるイベントがウィジェットに配信されます。 Qtの::と最後 可視主ウィンドウ(親のない、すなわちウィンドウ)をWA_QuitOnClose属性セットが閉じているとき

はQApplication :: lastWindowClosed()信号が発せられます。デフォルトでは、この属性 は、スプラッシュ の画面、ツールウィンドウ、ポップアップメニューなどの一時ウィンドウ以外のすべてのウィジェットに対して設定されています。

非表示:ウィジェットを非表示にします。この関数は、 setVisible(false)と同等です。

注:QDialogまたはそのサブクラスを使用していて、この関数の後に show()関数を呼び出すと、ダイアログは の元の位置に表示されます。

表示:ウィジェットとその子ウィジェットを表示します。この関数は、 で、setVisible(true)に相当します。

ウィジェットを使用する必要がない場合は、close()に電話してください。イベントを管理してウィジェットを破棄することができます。

hide()のみが非表示になります。それはグラフィカルなだけなので、あなたのウィジェットは見えませんが、あなたはそれを破壊しません。

しかし、私は関数の名前は十分に明白であると思います!

5

最初に@Haytと言って、readのドキュメント。実際の答えを

  1. hide()setVisible(false)と同じです。
  2. show()setVisible(true)と同じです。
  3. close()試みイベントは結果が受け入れられた場合、QCloseEventをトリガすることによって、ウィジェットを閉じるには:

    1. Qt::WA_DeleteOnClose属性がデフォルトでウィジェットに設定されていない場合hide()を呼び出すのと同じ。

    2. Qt::WA_DeleteOnCloseが設定されている場合は、deleteLater()と同じです。メモリの用語で

(あなたがQt::WA_DeleteOnCloseを設定している場合close()を除く)、3のいずれかが、何も変更されません。あなたは今までにウィジェットを使用したくない場合は、最高のは、それを削除することです:

delete pointerToMyWidget; 

または

pointerToMyWidget->deleteLater(); 

2番目の形式は、第一一つとして、一般的に安全でどこに応じて、危険なことができます書いてください。 (例えば、あなたが削除したウィジェットによって放出されたシグナルによって呼び出されたスロットでそれを削除する)。

+0

close()を使ってウィジェットを削除(およびメモリ解放)することができ、シグナルを管理するだけです。 –

+0

また、 'delete'を呼び出すことで削除できます。 –

+0

ありがとう:)私は欲しいものを持っています –