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

方法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