QT编程之区分点击和双击事件
来源:互联网 发布:讲课视频的软件 编辑:程序博客网 时间:2024/04/30 04:29
QT编程中如果想要对点击、双击相应不同的事件,不作处理是无法实现的。比较好的方法就是使用Timer区分。
这里实现 点击、双击一个Label,弹出不同的提示框。
先上代码:
MYLABEL.h
#define MYLABEL_H#include<QLabel>#include<QTimer>#include<QString>#include<QWidget>#include<QMainWindow>#include"QMessageBox"class Mylabel:public QLabel{ Q_OBJECTpublic: Mylabel(const QString &text,QWidget *parent=0); ~Mylabel(){}public: QTimer *timer; //定时器signals: void clicked(); public slots: void slotClicked(); //槽函数protected: void mousePressEvent(QMouseEvent* event); //单击 void mouseDoubleClickEvent(QMouseEvent * event); //双击};#endif // MYLABEL_H
Mylabel.cpp
#include<QLabel>#include"MYLABEL.h"#include"mainwindow.h"Mylabel::Mylabel(const QString & text,QWidget* parent) :QLabel(parent){ timer=new QTimer(this); this->setText(text); connect(timer, SIGNAL(timeout()), this, SLOT(slotClicked()));}void Mylabel::slotClicked(){ timer->stop(); QMessageBox::information(NULL, QString::fromLocal8Bit("Click"), QString::fromLocal8Bit("This is click."), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);}void Mylabel::mousePressEvent(QMouseEvent* event){ timer->start(1000);}void Mylabel::mouseDoubleClickEvent(QMouseEvent * event){ timer->stop(); QMessageBox::information(NULL, QString::fromLocal8Bit("DoubleClick"), QString::fromLocal8Bit("This is DoubleClick."), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);}
实现思路:
单击是一次点击,双击是一次点击后极短的时间间隔内再一次点击。
明白了这个之后,我们可以使用一个Timer实现区分。
当第一次点击后启动Timer,当Timer时间未用尽,再次接受一次点击时,就代表是双击。
当Timer的时间已用尽,也没有接受到第二次点击,就认为是单击事件。
代码解析:
1、在MYLABEL.h,中定义了一个Timer,槽函数,单击函数,双击函数
2、在Mylabel.cpp中
void Mylabel::mousePressEvent(QMouseEvent* event)
{
timer->start(1000);
}
当有点击事件发生时,即第一次点击时,启动一个定时器。
3、 connect(timer, SIGNAL(timeout()), this, SLOT(slotClicked()));
使用connect,定时器时间用尽时调用槽函数,实现单击事件。
槽函数关闭Timer,弹出单击提示框。
void Mylabel::slotClicked()
{
timer->stop();
QMessageBox::information(NULL, QString::fromLocal8Bit(“Click”),
QString::fromLocal8Bit(“This is click.”), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
}
4、 当Timer时间未用尽,产生第二次点击事件时,认为是双击事件。
关闭Timer,弹出双击提示框。
void Mylabel::mouseDoubleClickEvent(QMouseEvent * event)
{
timer->stop();
QMessageBox::information(NULL, QString::fromLocal8Bit(“DoubleClick”),
QString::fromLocal8Bit(“This is DoubleClick.”), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
}
实现效果:
未点击sdust(label)时
单击时:
双击时:
OK!
- QT编程之区分点击和双击事件
- Qt 区分单双击事件
- Qt 区分单双击事件
- qt 实现、区分鼠标单击,双击事件
- js区分鼠标单击和双击事件
- 如何区分单击和双击事件
- QT编程 之 为Label添加点击事件
- Qt 单击和双击事件响应实现
- Qt 单击双击的区分
- js中单击和双击事件的区分
- qt 双击事件处理
- UITapGestureRecognizer点击手势区分单双击
- android防止按钮多次点击和添加双击事件
- 区分 touch 事件是单击还是双击
- jquery 区分鼠标单击双击事件插件
- iOS touch事件单击双击区分响应
- C#窗体鼠标事件区分单击双击
- iPhone开发之区分 touch 事件是单击还是双击的方法
- How to use struts2 for program development?
- POJ
- 【算法】10亿int型数,统计只出现一次的数
- 5-16 求符合给定条件的整数集 (15分
- MySQL的安装
- QT编程之区分点击和双击事件
- leetcode-88
- servlet之filter知识
- 浅谈Python中对象拷贝
- 精通Jquery,JavaScript详解及回顾(3)
- 字符串逆序操作
- Keras学习---数据预处理篇
- python库集合
- Missing value auth-url required for auth plugin password