0

フィルタリングを開始するボタンまたはキーを押すことで、QMainWindow 全体でのマウス クリックのフィルタリングを有効または無効にできるようにしたいと考えています。クラス内からイベントフィルターを有効にしたいQMainWindow.

クラス内に eventfilter を呼び出すことができるようにしたいのですが、MyWindow見つけたものから新しいクラスを作成しMouseFilter、再定義eventFilter(QObject* object,QEvent* event)して myWindow にインストールする必要があります

int main(int argc, char *argv[]) {
    QApplication a(argc, argv);
    MyWindow w;
    w.installEventFilter(new MouseFilter());
    w.show();
    return a.exec();
}

オブジェクト内からイベント フィルタを実装する方法はありますか?


解決

物事を複雑にしすぎたのかもしれません。サブクラス化と同じくらい簡単mousePressEventです。

void MouseFilter::mousePressEvent(QMouseEvent * event){
    if(event->button() == Qt::RightButton){
        qDebug() << "Right-o";
    }
}
4

2 に答える 2

1

イベント フィルタは、別のオブジェクトへの途中でイベントをフィルタリングするために使用されます。イベント ハンドラーを使用すると、イベント処理ロジックを実装できます。イベント フィルターはイベント ハンドラーでもありますが、他のオブジェクトによって受信されるようにバインドされたイベントをインターセプトすることによって機能し、宛先にパススルーするかどうか、およびパススルーする方法を決定します。

あなたがしたいことは、イベント ハンドラーを実装することだけを考えているように聞こえます。したがって、イベント フィルタは必要ありません。

イベント フィルターは、イベントをブロックまたは変換する場合、またはイベント処理をオーバーライドできない、またはオーバーライドしたくないオブジェクトの動作を変更する場合に役立ちます。

于 2015-08-27T05:26:23.243 に答える
1

あなたが探しているのは、内部からオーバーライドできるmousePressEventだと思いますMyWindow

乾杯、ロスティスラフ。

于 2015-08-27T01:07:44.313 に答える