20200618-01 Qt widget 按钮事件捕捉 Qml 点击事件捕捉(电容屏触摸输入)

起因

设备需求点击之后触发蜂鸣器,有两套方案:

  1. 每个按钮都写入这串指令,令其能够调用触发蜂鸣器的类
  2. 通过全局的方式,这种只需要一个地方写调用程序即可,更加可行一点

QWidget 触摸事件捕捉

QWidget 是比较简单能够捕捉触摸事件的,就是对 QApplication 中的 notify 进行覆盖

bool MyApplication::notify(QObject *obj, QEvent *event)
{
    //常规鼠标点击或按键
    if((obj!=NULL) &&
       (event->type()==QEvent::KeyPress || event->type()==QEvent::MouseButtonPress ||
        event->type()==QEvent::MouseButtonDblClick)  )
    {
        bool isEnable=false;
        //普通 widget 按键事件
        if(obj->inherits("QPushButton")){
            QPushButton *pPushButton=(QPushButton*)obj;
            isEnable=pPushButton->isEnabled();
        }else if(obj->inherits("QToolButton")){
            QToolButton *pToolButton=(QToolButton*)obj;
            isEnable=pToolButton->isEnabled();
        }
        if(isEnable) {
            g_soundSet->keyVoice();
        }
    }

    return QApplication::notify(obj,event);
}

QML 触摸事件 (含触摸屏输入)

方式一: QML 自带

    TapHandler {
    	acceptedButtons: Qt.RightButton
        onTapped: console.log("right clicked")
    }

这样就能够捕捉同文件内对象的各种事件,局限性就是没法全局实现捕获

方式二: 全局捕获(注意这里对于 ListView 这类触摸事件暂时没法特别区分出来)

bool MyApplication::notify(QObject *obj, QEvent *event)
{
    // 触摸板而言 电容屏的输出是 TouchEnd 来具体可打印一下输出
    if ((obj != NULL && event->type() == QEvent::TouchEnd)) {
    	//普通按钮
        if (obj->inherits("QQuickButton")) {
            qDebug() << "------------T";
        }
    }

    //常规鼠标点击或按键
    if((obj!=NULL) &&
       (event->type()==QEvent::KeyPress || event->type()==QEvent::MouseButtonPress ||
        event->type()==QEvent::MouseButtonDblClick)  )
    {
        //常规鼠标点击(右击)
        if (obj->inherits("QQuickAbstractButton")) {
            qDebug() << "------------T";
        }
        //键盘事件
        if (obj->inherits("QQuickMouseArea")) {
            if (obj->parent()) {
                if (obj->parent()->objectName() == "keyboard")
                    qDebug() << "-------VVVVVVV";
            }
        }
    }
    return QApplication::notify(obj,event);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章