鼠标添加单击双击事件

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()
{
  
// 单击要做的事
判断是否是作键按下:
if(e->button()==Qt::LeftButton) ...
然后其他还有:
Qt::RightButton, Qt::MiddleButton(滚轮)
还可以对掩码进行处理:
Qt::MouseButtonMask
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值