0

close イベントを処理する Qt フォームを作成しました。私の他のクラス (Test クラス) で、このフォームのインスタンスを作成し、"Test" クラスからフォームのクローズ イベントを処理したいと考えています。

「Test」クラスで次のコードを使用してみましたが、動作しないようです。

connect(instanceWidget, SIGNAL(closeEvent(QCloseEvent *)), this, SLOT(handleFormCloseEvent(QCloseEvent *)));

注意 instanceWidget は、テスト クラスからの Qt フォームのインスタンスです。

4

2 に答える 2

0

のようなイベント ハンドラー メソッドcloseEventはシグナルではないため、それらに接続することはできません。

イベント処理は次のようになります。

  1. イベント ループは、特定のオブジェクトのイベントをそのキューから取得します。

  2. を呼び出してオブジェクトに通知しますobject->event(...)

  3. このメソッドは で再実装されQWidget、関連する特定のイベント ハンドラを呼び出します。この場合、 を呼び出しますcloseEvent()

シグナル/スロットは関係ありません。

他のオブジェクト ( aQWidgetは a ) のイベントを処理する場合は、それらにイベント フィルターをインストールするQObject必要があります。イベント フィルターは、他のイベントを通過させながら、関心のあるイベントに反応します。

于 2013-09-26T19:44:13.083 に答える
0

私の解決策 -

フォーム/UI クラスで OnClose イベントを処理し、次のコードを挿入します -

エミット OnClose(); イベント -> 受け入れる;

シグナル OnClose(); を追加します。

インスタンス化された (テスト クラス) で、OnClose のシグナルとスロットを作成し、カスタム機能を提供します。

-- フォームを閉じると、UI の close イベント ハンドラが呼び出され、onclose シグナルが発行され、テスト クラスによって処理されます。その後、フォーム クラスに戻り、フォームを閉じます。

于 2013-09-26T23:31:39.257 に答える