2017-01-02 3 views
0

私は1つのウィジェットが別のウィジェット内にある階層化されたアーキテクチャを持っています。 一番上のオブジェクトはQMainWindowであり、任意の数の内部ウィジェット(別のものの中に1つ)があります。 例: - mainwindowはwidget1の親です。widget1はwidget2の親です。so on ..イベントを最上位のWidget/QMainWindowに伝播させる最善の方法はQT

今、私は一番上のウィンドウで最新の子のcloseイベントを処理する必要があります。 QT 5.7でそれを達成する最良の方法を知りたい。あなたはQMainWindowをサブクラス化しchildEvent機能上書きすることもできます

+1

あなたが近いイベントを処理するとはどういう意味ですか:

http://doc.qt.io/qt-5/qobject.html#childEvent

はあなたのような何かを行うことができますか?あなたは何を達成しようとしていますか? – wasthishelpful

+0

最新の子が閉じられたときに一番上のウィンドウで何かしたい。一番上のウィンドウのcloseEventハンドラをオーバーライドしたいかもしれませんが(それが良い方法であれば)、その後、一番上のWidget/mainWindowまでクローズイベントを伝える方法を知る必要があります。 –

+0

メインウィンドウが閉じているので、最初に子プロセスのクローズイベントをどのようにトリガーしていますか?あなたの質問を[最小限の、完全で実証可能な例]で編集してください(http://stackoverflow.com/help/mcve) – wasthishelpful

答えて

0

class TarunsMainWindow : QMainWindow { 
protected: 
    void childEvent(QChildEvent event) override { 
     if (event->type() == QEvent::ChildRemoved) { 
      // do something special 
     } 

     QMainWindow::childEvent(event); 
    } 
} 
+0

あなたの答えをありがとう。あなたの方法で親の子削除イベントを捕まえることができましたが、一番上のウィンドウ/ウィジェットでそれを行う必要があります。私は、イベントが先祖に伝わることを望んでいる親の直属のイベントを無視しようと試みました。しかし、これはうまくいかなかった。 –

+0

あなたは、すべての親が適切に結びつけられているなら、あなたはこのデザインでうまくいくはずです...多分あなたはどこかで親を適切に設定していないでしょうか? – tinkertime

関連する問題