Qt 把连续两次单击当成双击

本文详细介绍了在Qt框架下实现双击事件的三种不同方法。第一种使用计时器来判断两次单击是否在设定时间内发生;第二种利用静态变量记录时间差,判断两次点击是否快速连续;第三种采用更精确的时间戳计算方式,提高双击识别的准确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

方法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(300);//300ms是判断双击的时间间隔,不唯一,可根据实际情况改变 } m_nClickCount += 1;
  //300ms 内,两次单击则触发双击效果 ,然后停止计数
if(m_nClickCount == 2) { emit sigClose(); m_nClickCount = 0; m_timer->stop(); } } void onKeyOneClick() { m_timer->stop(); m_nClickCount = 0; }

 

方法2:

void MainWindow::mouseReleaseEvent(QMouseEvent *)
{
    static int num = 0;
    static double time_Start = 0 ;
    static double time_End = 0 ;

    num+=1;
    if(num == 1){
        time_Start = (double)clock();
        qDebug()<< "num == 1";
        if((time_Start - time_End) < 400){//连续快速两次单击
            //
            qDebug()<< "click quickly " << time_Start - time_End ;
        }
    }
    if(num == 2){
        num = 0;
        qDebug()<< "num == 2";
        time_End = (double)clock();
        if((time_End - time_Start) < 400){//连续快速两次单击
            //
            qDebug()<< "click quickly " << time_End - time_Start ;
        }
    }
}

 方法3:

void MainWindow::mouseReleaseEvent(QMouseEvent *)
{
    static int num = 0;
    static  struct timeval tpstart,tpend;
    float timeuse;

    num+=1;
    if(num == 1){
         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 == 2){
        num = 0;
        gettimeofday(&tpend,NULL);
        timeuse=(1000000*(tpend.tv_sec-tpstart.tv_sec) + tpend.tv_usec-tpstart.tv_usec)/1000.0;
        qDebug()<< "num == 2 "  << timeuse;
        if(timeuse < 400){//连续快速两次单击
            //
            qDebug()<< "click quickly " ;
        }
    }
}

 

转载于:https://www.cnblogs.com/nanqiang/p/11556772.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值