方法1: 主要通过计时器,在一段时间内的连续两次单击,触发双击事件


void init()
{
  m_nClickCount = 0;
  m_timer = new QTimer(this);
  connect(m_timer, SIGNAL(timeout()), this, SLOT(onKeyOneClick()));
}
void mouseReleaseEvent(QMouseEvent*)
{
if (!m_timer->isActive()) //计数期间,则不重新开始
{
m_timer->start();//300ms是判断双击的时间间隔,不唯一,可根据实际情况改变
}
m_nClickCount += ;
  //300ms 内,两次单击则触发双击效果 ,然后停止计数
if(m_nClickCount == )
{
emit sigClose();
m_nClickCount = ;
m_timer->stop();
}
} void onKeyOneClick()
{
m_timer->stop();
m_nClickCount = ; }

方法2:

void MainWindow::mouseReleaseEvent(QMouseEvent *)
{
static int num = ;
static double time_Start = ;
static double time_End = ; num+=;
if(num == ){
time_Start = (double)clock();
qDebug()<< "num == 1";
if((time_Start - time_End) < ){//连续快速两次单击
//
qDebug()<< "click quickly " << time_Start - time_End ;
}
}
if(num == ){
num = ;
qDebug()<< "num == 2";
time_End = (double)clock();
if((time_End - time_Start) < ){//连续快速两次单击
//
qDebug()<< "click quickly " << time_End - time_Start ;
}
}
}

方法3:

void MainWindow::mouseReleaseEvent(QMouseEvent *)
{
static int num = ;
static struct timeval tpstart,tpend;
float timeuse; num+=;
if(num == ){
gettimeofday(&tpstart,NULL);
// timeuse=(1000000*(tpend.tv_sec-tpstart.tv_sec) + tpend.tv_usec-tpstart.tv_usec)/1000.0;
// qDebug()<< "num == 1 " << timeuse ;
// if(timeuse< 400){//连续快速两次单击
// //
// qDebug()<< "click quickly " ;
// }
}
if(num == ){
num = ;
gettimeofday(&tpend,NULL);
timeuse=(*(tpend.tv_sec-tpstart.tv_sec) + tpend.tv_usec-tpstart.tv_usec)/1000.0;
qDebug()<< "num == 2 " << timeuse;
if(timeuse < ){//连续快速两次单击
//
qDebug()<< "click quickly " ;
}
}
}

Qt 把连续两次单击当成双击的更多相关文章

  1. (转)MFC:Windows如何区分鼠标双击和两次单击

    在Windows平台上,鼠标左键的按下.松开.快速的两次点击会产生WM_LBUTTONDOWN.WM_LBUTTONUP和WM_LBUTTONDBLCLK消息,但是Windows根据什么来区分连续的两 ...

  2. Qt:QPushButton 单击、双击响应区分

    开发环境:win10+vs2015+qt5.9.1 背景:QPushButton的双击事件虽然一直有,但是在双击完成之前,总会响应到单击的事件处理或者连接槽,使用很不方便.自己子类化了一个QPushB ...

  3. (转) Windows如何区分鼠标双击和两次单击

    Windows如何区分鼠标双击和两次单击 http://lbsloveldm.blog.hexun.com/12212875_d.html 在Windows平台上,鼠标左键的按下.松开.快速的两次点击 ...

  4. Angular JS中双击事件ng-dblclick避免同时触发两次单击事件ng-click的解决方案

    有些需求中,需要一个元素上既有双击事件,也有单击事件,而两者实现的效果不一样. 这时可以使用ng-dblclick与ng-click来实现需求,但是要避免浏览器将双击事件误认为是两次单击事件,从而出现 ...

  5. javascript双击事件取消默认的两次单击事件

    当一个元素同时具有单击和双击事件时,双击时会触发2次单击和1此双击事件. 双击会:先第1次单击 ,同时触发第2次和双击事件. 造成的不好影响:每次单击事件会延迟执行. <!DOCTYPE htm ...

  6. 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验四:按键模块③ — 单击与双击

    实验四:按键模块③ - 单击与双击 实验三我们创建了"点击"还有"长点击"等有效按键的多功能按键模块.在此,实验四同样也是创建多功能按键模块,不过却有不同的有效 ...

  7. jquery 单击和双击事件冲突解决方案

    先看一下点击事件的执行顺序: 单击(click):mousedown,mouseout,click: 双击(dblclick):mousedown,mouseout,click , mousedown ...

  8. winform里怎样在一个按钮上实现“单击”和“双击”事件?

    Button按钮是没有双击事件(DoubleClick)的. button1.DoubleClick+=new EventHandler(button1_DoubleClick);使用这种方法在双击的 ...

  9. Hololens开发笔记之Gesture手势识别(单击,双击)

    本文使用手势识别实现识别单击及双击手势的功能,当单击Cube时改变颜色为蓝色,当双击Cube时改变颜色为绿色. 手势识别是HoloLens交互的重要输入方法之一.HoloLens提供了底层API和高层 ...

随机推荐

  1. 转:SLAM算法解析:抓住视觉SLAM难点,了解技术发展大趋势

    SLAM(Simultaneous Localization and Mapping)是业界公认视觉领域空间定位技术的前沿方向,中文译名为“同步定位与地图构建”,它主要用于解决机器人在未知环境运动时的 ...

  2. DB2输出每隔10分钟的数据

    一.输出1-100的数据 此处参考 https://bbs.csdn.net/topics/390516027 with t(id) as ( as id from sysibm.sysdummy1 ...

  3. wordpress 后台无法登录 网站内容缺失

    昨天网站又突然不正常了,前两天都是好的.. 具体来说就是wp后台登录不进去,一直在登录页跳转,与此同时服务器上其他网站也有这个问题,而且有些网站的板块内容也缺失了, 所以首要就是要登录进后台看看是不是 ...

  4. Django之Hook函数

    Django之钩子Hook方法 局部钩子: 在Fom类中定义 clean_字段名() 方法,就能够实现对特定字段进行校验.(校验函数正常必须返回当前字段值) def clean_name(self): ...

  5. MySQL的sql语言分类DML、DQL、DDL、DCL

    SQL语言一共分为4大类:数据定义语言DDL,数据操纵语言DML,数据查询语言DQL,数据控制语言DCL 1.数据定义语言DDL(Data Definition Language) 对象: 数据库和表 ...

  6. WUSTOJ 1283: Hamster(Java)

    1283: Hamster 参考博客 wust_tanyao的博客 题目   第0个月有1对仓鼠.仓鼠的寿命是M个月,仓鼠成年后每个月生一对仓鼠(一雌一雄),问N个月后有仓鼠多少对.更多内容点此链接 ...

  7. 硬件实现IIC协议读取EEPROM

    我TMD也是服了,反正我板子搞了半天也不成功我也不知道为什么,野火STM32-MINI,一直卡EV5,不管了 先代码沾上 工程目录(板子为野火STM32 MINI) 串口相关代码: bsp_usart ...

  8. 数据库SQL语句大全——最常用的SQL语句

    检索数据: 检索单个列: SELECT pname FROM product 检索多个列: SELECT pname,market_price,is_hot FROM product 检索所有列: S ...

  9. delete删除数据造成归档日志增加,操作系统空间不足导致数据库hang住

    业务需求,对日志表历史数据进行清理.历史表均很大,使用delete 操作删除90天前的数据. 第一部分:快速删除数据 SQL> alter table CC.F_LOG parallel ; S ...

  10. [javascript]原生js实现Ajax

    一.首先看JQuery提供的Ajax方法: $.ajax({ url: , type: '', dataType: '', data: { }, success: function(){ }, err ...