Qt EventFilter-事件过滤器消耗了事件后,控件再也不会返回到MouseArea

时间:2019-02-06 08:08:26

标签: qt qml qt5

我正在尝试从多个接触点中过滤掉接触事件。因此,已经安装了一个EventFilter,它会做出反应并消耗具有多个接触点的事件,否则会返回false。当我运行示例qml时,鼠标单击最初可以在窗口上单击,而我在窗口上进行多次触摸,事件被事件过滤器消耗(如预期的那样),但是当我再次在窗口上进行一次触摸时,MouseArea从不获取事件。我还尝试过在事件过滤器返回时使用调试,当单个接触点确实返回false时。 Qt版本-> Windows上的5.9.4 MingW 32位

bool MultipleTouchFilter::eventFilter(QObject *obj, QEvent *event)
{
    qDebug() <<"Object name " << obj->objectName();
    QTouchEvent *  eventTouch = dynamic_cast< QTouchEvent * >(event);
    if(eventTouch != nullptr && eventTouch->touchPoints().count() > 1)
      return true;
    else
      return false; 
}

我已将此过滤器安装到QCoreApplication

QCoreApplication *app = QCoreApplication::instance();
    if (app) {
        app->installEventFilter(m_multitouchFilter);
    }

main.qml

Window {
    objectName: "main window"
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")
    MouseArea{
        objectName: "MouseArea"
        anchors.fill: parent
        onClicked: {
            console.log("Single touch ")
        }
    }
}

0 个答案:

没有答案