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);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章