我是靠谱客的博主 精明白羊,最近开发中收集的这篇文章主要介绍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);
}

最后

以上就是精明白羊为你收集整理的20200618-01 Qt widget 按钮事件捕捉 Qml 点击事件捕捉(电容屏触摸输入)的全部内容,希望文章能够帮你解决20200618-01 Qt widget 按钮事件捕捉 Qml 点击事件捕捉(电容屏触摸输入)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部