Qt中判断鼠标的双击和单击事件
1致谢
赵纯同学提示了思路。
这个方法是参考文献[1]的实现。
2问题来源
Qt中,在双击事件mouseDoubleClickEvent中会触发单击事件mousePressEvent事件,原因是[见1]:
(1).鼠标 按下->弹起 ,一个单击信号就发射了
(2).在单击后的一段(很短)的时间内,鼠标 按下->弹起,一个双击信号发射
3解决方法
鼠标按下时启动timer计时,在一段时间内,没有双击信号,则做出单击响应,否则做出双击响应[见1]
(1)类的头文件中添加槽和计时器
注意:加入槽函数时要加上Q_OBJECT宏
public slots:
void mouseClick();
private:
QTimer *timer;
(2)在构造函中
timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(mouseClick()));
(3)单击事件
注意:根据我的测试时间间隔可以设为250、300,不要设得太小,我不知道最合适应设多少,大家在自己的程序里试一下吧。
要是有人知道如何设置最合适时间间隔,留言告诉我,谢谢了。
void PaintArea::mousePressEvent(QMouseEvent *event)
{
timer->start(300);
}
(4)双击事件
void PaintArea::mouseDoubleClickEvent(QMouseEvent *event)
{
timer->stop();
//双击要做的事
}
(5)槽函数
void PaintArea::mouseClick()
{
//单击要做的事
}
参考文献:
[1]dbzhang800, http://topic.csdn.net/u/20100919/15/c620463f-2a2d-4201-985b-47d3b044cb8d.html 的三楼