1

アプリケーションのメイン ウィンドウがいつ移動されたかを判断しようとしています。メイン ウィンドウは標準の QMainWindow であり、QMainWindow の moveEvents を探すために QApplication に eventFilter をインストールしましたが、何もトリガーされていません。さまざまな理由から、QMainWindow をサブクラス化することは実際にはオプションではありません。

常に位置をチェックするために QTimer t を開始する以外に、これに関する考えは大歓迎です。

4

2 に答える 2

2

アプリケーションではなく、最上位ウィンドウにイベント フィルターをインストールする方がよいと思います。ただし、まだQMoveEvents を取得できず、Windows で作業している場合は、オーバーライドwinEventFilter()して を待つことができますWM_MOVE。Linux と Mac で同様の機能が利用できる場合があります。

私は通常、プラットフォーム非依存性を壊すことはお勧めしませんが、場合によってはそれが理にかなっている場合もあります。

于 2009-05-29T17:09:26.197 に答える
1

サブクラス化は本当に最良の解決策です:-/

トップ レベル ウィンドウを実装するクラスでは、この関数をオーバーロードするだけです。

virtual void moveEvent ( QMoveEvent * event )

ドキュメントから:

このイベント ハンドラーをサブクラスに再実装して、イベント パラメーターで渡されるウィジェット移動イベントを受け取ることができます。ウィジェットがこのイベントを受け取ると、ウィジェットはすでに新しい位置にあります。

古い位置は QMoveEvent::oldPos() でアクセスできます。

これにより、メイン ウィンドウが移動したかどうかを検出できるようになります。なぜサブクラス化できないのですか?のインスタンスをQMainWindow直接使用していますか? 通常の使用例はとにかくそれをサブクラス化することです。

于 2009-05-29T18:16:03.087 に答える