Qt 单击和双击事件响应实现

参考这篇博文实现:

http://www.cnblogs.com/siyuan/archive/2010/11/22/1883703.html

改动为:采用变量isDoubleClicked标记,单击对应1,双击对应2,常态不点击为0,更方便实现。


(1) 首先新建一个MainWindow类。


(2) mainwindow.h文件中声明:

 
  
private slots:
	void timerSingleClick(); //定时器事件,处理单击任务

public:
	QTimer* pQTimerDoubleClicked; //判断单双击的定时器
    	int isDoubleClicked; //区分是单击还是双击


(3) mainwindow.cpp文件,构造函数中:

 
  
isDoubleClicked = 0; //初始化不点击
pQTimerDoubleClicked = new QTimer(this); //新建定时器
connect(pQTimerDoubleClicked,SIGNAL(timeout()),this,SLOT(timerSingleClick())); //关联定时器和槽函数


(4) mainwindow.cpp文件,按钮点击的槽函数,包含双击响应代码:

void MainWindow::on_pushButton_clicked()
{
    isDoubleClicked++;
    if(isDoubleClicked==1)
        pQTimerDoubleClicked->start(430); //430ms为自己设置

    if(isDoubleClicked==2)
    {
        isDoubleClicked = 0; //先初始化
        pQTimerDoubleClicked->stop();//先初始化

        //按钮双击响应代码放这里
        QMessageBox::warning(this,tr("警告"),tr("我是双击!!!"),tr("确定"));

    }
}

(5) mainwindow.cpp文件,定时器事件响应槽函数,包含单击响应代码:

void MainWindow::timerSingleClick()
{
    isDoubleClicked = 0; //先初始化
    pQTimerDoubleClicked->stop(); //先初始化

    //按钮单击响应代码放这里
    QMessageBox::warning(this,tr("警告"),tr("单击"),tr("确定"));
}

完成。


个人认为相比于原帖子使用两个鼠标点击事件mousePressEvent和mouseDoubleClickEvent,本文使用一个按钮点击槽函数和一个变量isDoubleClicked解决,更实用,一个定时器参数也更好调节。

 
  
 
  
 
  
 
  
 
  
 
  
 
 

你可能感兴趣的:(Qt)