web-dev-qa-db-ja.com

qt QWidgetクリック

QWidgetをベースにした独自のクラスがあります。このウィジェットをQMainWindowに配置し、このウィジェットでマウスのクリックをキャッチする必要があります。

私は試した:

connect(my_widget, SIGNAL(clicked()), this, SLOT(exit(0)));

しかし、何も起こっていません。どうすればできますか?

24
0xAX

QWidgetにはclicked()シグナルがなく、QMainWindowにはexit()スロットがありません。存在しない信号や存在しないスロットに接続することはできません。接続が成功した場合、接続の戻り値はtrueでなければなりません。接続時にこの値を確認して、コードが正しく機能することを確認してください。

アプリケーションを終了するには、qApp->quit()を呼び出す必要があります

また、他の人が言及したように、eventFilterをインストールするか、

_void QWidget::mousePressEvent ( QMouseEvent * event )   [virtual protected]
_

または

_void QWidget::mouseReleaseEvent ( QMouseEvent * event )   [virtual protected]
_

メソッド。

Qtの公式ドキュメントには多くの例があります this たとえば、mousePressEvent(QMouseEvent *event)メソッドを再実装します。

EventFilterオプションについては、 this の小さな例を参照してください。

お役に立てれば。

35
Live

QWidgetにはclicked信号がありません。これを機能させるには、イベントを使用します。すべてのウィジェットはイベントをサポートしているため、手動で行う作業がいくつかありますが、多くはありません。

  1. ウィジェットのevent関数をオーバーライドします(これはQWidgetから派生します)
  2. タイプQEvent:: MouseButtonPressのイベントに応答する

または、eventFilterメソッドを追加します。

コードサンプルと、正確なニーズに応じて完全なソリューションを実現するために、私が言及したクラスとメソッドをグーグルします。

9
Eli Bendersky