2024年1月4日发(作者:)

Qt中判断鼠标的双击和单击事件(转载)

1致谢

2问题来源

Qt中,在双击事件mouseDoubleClickEvent中会触发单击事件mousePressEvent事件,原因是:

(1).鼠标 按下->弹起 ,一个单击信号就发射了

(2).在单击后的一段(很短)的时间内,鼠标 按下->弹起,一个双击信号发射

3解决方法

鼠标按下时启动timer计时,在一段时间内,没有双击信号,则做出单击响应,否则做出双击响应

(1)类的头文件中添加槽和计时器

注意:加入槽函数时要加上Q_OBJECT宏

public slots:

void mouseClick();

private:

QTimer *timer;

(2)在构造函中

timer = new QTimer(this);

connect(timer, SIGNAL(timeout()), this, SLOT(mouseClick()));

(3)单击事件

注意:根据我的测试时间间隔最小设为200,再小就不行了,不知道为什么,求解

void PaintArea::mousePressEvent(QMouseEvent *event)

{

timer->start(200);

}

(4)双击事件

void PaintArea::mouseDoubleClickEvent(QMouseEvent *event)

{

timer->stop();//禁止单击要做的事

//双击要做的事

}

(5)槽函数

void PaintArea::mouseClick()

{

//单击要做的事

}