参考这篇博文实现:
http://www.cnblogs.com/siyuan/archive/2010/11/22/1883703.html
改动为:采用变量ClickedState标记点击状态,常态不点击为0,单击对应1,双击对应2,更方便实现。
(1) 首先新建一个MainWindow类。
(2) mainwindow.h文件中声明:
private slots:
void timerSingleClick(); //定时器事件,处理单击任务
public:
QTimer* pQTimerSingleClicked; //单击后启动的定时器,用于判断是否触发了双击
int ClickedState; //点击状态,常态不点击为0,单击对应1,双击对应2
(3) mainwindow.cpp文件,构造函数中:
ClickedState = 0; //初始化不点击
pQTimerSingleClicked= new QTimer(this); //新建定时器
connect(pQTimerSingleClicked, SIGNAL(timeout()), this, SLOT(timerSingleClick())); //关联定时器和槽函数
(4) mainwindow.cpp文件,按钮点击的槽函数,包含双击响应代码:
void MainWindow::on_pushButton_clicked()
{
ClickedState ++;
if(ClickedState == 1)
pQTimerSingleClicked->start(430); //430ms为自己设置
if(ClickedState == 2)
{
ClickedState = 0; //初始化
pQTimerSingleClicked->stop(); //停止定时器继续计时
//按钮双击响应代码放这里
QMessageBox::warning(this,tr("警告"),tr("我是双击!!!"),tr("确定"));
}
}
(5) mainwindow.cpp文件,定时器事件响应槽函数,包含单击响应代码:
void MainWindow::timerSingleClick()
{
ClickedState = 0; //初始化
pQTimerSingleClicked->stop(); //定时器停止计时
//按钮单击响应代码放这里
QMessageBox::warning(this,tr("警告"),tr("单击"),tr("确定"));
}
完成。
个人认为相比于原帖子使用两个鼠标点击事件mousePressEvent和mouseDoubleClickEvent,本文使用一个按钮点击槽函数和一个状态量ClickedState解决,更实用,一个定时器参数也更好调节。