42545


`Qt`で開発をしているんですけれども、ダイアログ等のように、ポップアップするウィジェットを  
作成したり、ドックウィジェットのように、フローティングするウィジェットがある場合、それが表示されているときに、一番のメイン画面を消すことがあります。そういう時、出現中のウィジェットも同時に消すようにしたいのですが、その場合はどうすればいいでしょうか。長らく放っといた問題なんですが、表示される可能性のあるウィジェットをあらかじめどこかのコンテナに入れておいて、`closeEvent()`時に全てチェックするしかないでしょうか？


CC BY-SA 3.0
2018-03-15T06:39:29.167
42411
2018-04-01T11:16:30.540
24284
question
qt pyside pyqt
メインウィジェットが消されれば、フローティング中のダイアログやウィジェット等も同時に消したい。


自己解決

質問に書いての通り、closeEventをオーバーライドし、フローティングする可能性のあるウィジェットを終了時に調べてしまうのが、一番いいと思います。

[code]

    def closeEvent(self,event):
        if self.add_dialog.isVisible():
            self.add_dialog.close()
    
[/code]

`dialog`は、一時的に表れる画面としてよく設定されますが、上のようにしていけば、あまりにも大量に出てくるようなアプリケーションでない限り、さほど労せずチェックできるはずです。  
バグ取の問題だと思います。  
(追記 2018/4/1)  
ほかの方法を見付けました。

[code]

    PySide.QtGui.QApplication.closeAllWindows()
    
[/code]

これを、`closeEvent`配下に入れてしまいましょう。もうクローズ残しは心配いりません。


CC BY-SA 3.0
2018-03-21T11:24:16.493
42545
2018-04-01T11:16:30.540
2018-04-01T11:16:30.540
24284
24284
42411
answer