当前位置: 首页 > news >正文

Qt自定义按键实现长,短按

本文介绍Qt自定义按键实现长,短按。

Qt触摸屏应用有时会涉及到触摸屏按钮长,短按操作,如长按实现关机操作,本文基于普通QPushButton为基类,自定义按键实现长,短按操作。

1.定义新类

这里以QPushButton为基类,自定义一个新类“CustomButton”,参考代码如下:

1)头文件

#ifndef CUSTOMBUTTON_H
#define CUSTOMBUTTON_H#include <QWidget>
#include <QElapsedTimer>
#include <QEvent>
#include <QPushButton>class CustomButton : public QPushButton
{Q_OBJECT
public:explicit CustomButton(QWidget *parent = nullptr);signals:void shortPressed(void);void longPressed(void);public slots:protected:bool event(QEvent *event) override;private:QElapsedTimer pressTime;bool bLongPressed;
};#endif // CUSTOMBUTTON_H

类中声明了2个信号,shortPressed()和longPressed()信号。

2)源文件

若想使能触摸事件,需要在构造函数中设置“setAttribute(Qt::WA_AcceptTouchEvents);”。

#include "custombutton.h"
#include <QMouseEvent>
#include <QDebug>CustomButton::CustomButton(QWidget *parent) : QPushButton(parent)
{setAttribute(Qt::WA_AcceptTouchEvents);bLongPressed = false;
}bool CustomButton::event(QEvent *event)
{if (event->type() == QEvent::TouchBegin) {setPalette(QPalette(Qt::red));pressTime.start();bLongPressed = false;return true;} else if (event->type() == QEvent::TouchUpdate) {if (!bLongPressed && (pressTime.elapsed() >= 3000)) {bLongPressed = true;Q_EMIT longPressed();}return true;} else if (event->type() == QEvent::TouchEnd) {setPalette(QPalette(Qt::white));if (!bLongPressed) {Q_EMIT shortPressed();}return true;} else {}return QPushButton::event(event);
}

注意:在接收到触摸事件后,需要返回“true”,否则后续触摸事件无法接收。

2.控件提升

在界面中放置一个普通的PushButton,右键选择“Promoted Widgets”,添加刚才新建的类。

在界面函数中连接新类中的shortPressed()和longPressed()信号到相应的槽函数,即可实现相应的长,短按功能。

缺陷:长按操作时间不准,有时长按时间较短,有时较长。

总结,本文介绍了Qt自定义按键实现长,短按。

http://www.lryc.cn/news/438719.html

相关文章:

  • 禁用win10的自动更新功能
  • 机器学习 第12章 计算学习理论
  • 【雅特力AT32】外部中断事件控制器EXINT(附源码解析)
  • Redis集群_cluster
  • jdk相关介绍
  • 【GoMate框架案例】讯飞大模型RAG智能问答挑战赛top10 Baseline
  • 2024/9/15 408“回头看”之应用层小总结(下)
  • 经纬恒润高压电池管理系统,助力新能源汽车飞速发展
  • 一文速通calcite结合flink理解SQL从文本变成执行计划详细过程
  • spring-TransactionTemplate 编程式事务
  • 中考全国45套(全国教育发达地区中考试卷)
  • 嵌入式Linux学习笔记(5)-进程间常见通讯方式(c语言实现)
  • 【移动端】菜单的自动展开与收回
  • Java获取Object中Value的方法
  • 集群聊天服务器项目【C++】(二)Json的简单使用
  • 班迪录屏和这三款录屏工具,一键操作,太方便了!
  • DAY60Bellman_ford 算法
  • Dubbo SPI源码
  • 《C++代码高度优化之双刃剑:避免过度优化引发的“暗雷”》
  • javascript网页设计案例
  • 初阶数据结构【TOP】- 11.普通二叉树的介绍 - 1. (细致,保姆~~!)
  • 【pyenv】pyenv安装版本超时的解决方案
  • 【新片场-注册安全分析报告-无验证方式导致安全隐患】
  • 新160个crackme - 057-bbbs-crackme04
  • 车机中 Android Audio 音频常见问题分析方法实践小结
  • 湘大 OJ 代码仓库
  • Ruoyi Cloud K8s 部署
  • OpenGL Texture C++ Camera Filter滤镜
  • 基于Sobel算法的边缘检测设计与实现
  • java:练习