qt 实现、区分鼠标单击,双击事件

qt 只实现了鼠标左键的双击事件,同时会触发mousePressEvent事件,那么怎么区分鼠标的单击,双击呢??进入正题,请见以下源码,或者下载资源:http://download.csdn.net/detail/shaosheng2008/9823796

/**************************************/

//头文件: double_single_clicked.h

/*************************************/

#ifndef DOUBLE_SINGLE_CLICKED_H
#define DOUBLE_SINGLE_CLICKED_H


#include <QtWidgets/QWidget>


class QTimer;
class QLabel;


class DoubleSingleClicked : public QWidget
{
Q_OBJECT


public:
DoubleSingleClicked(QWidget *parent = 0);
~DoubleSingleClicked();


protected:
void mouseDoubleClickEvent(QMouseEvent *e);
void mousePressEvent(QMouseEvent *);


private slots:
void slotSingleClicked();
private:
QTimer *m_clickedTimer = nullptr;
QLabel *m_label = nullptr;
};

#endif // DOUBLE_SINGLE_CLICKED_H



/***********************************************************************************************************/

//.cpp文件:double_single_clicked.cpp

/**********************************************************************************************************/

#include "double_single_clicked.h"
#include <QTimer>
#include <QLabel>
#include <QMouseEvent>


DoubleSingleClicked::DoubleSingleClicked(QWidget *parent)
: QWidget(parent)
{
setFixedSize(600, 400);
m_label = new QLabel(this);
m_label->move(15, 50);
m_label->setText(QStringLiteral("区分鼠标单击,双击事件!"));


m_clickedTimer = new QTimer(this);
connect(m_clickedTimer, SIGNAL(timeout()), this, SLOT(slotSingleClicked()));
}


DoubleSingleClicked::~DoubleSingleClicked()
{


}


void DoubleSingleClicked::mouseDoubleClickEvent(QMouseEvent *e)
{
if (m_clickedTimer->isActive())
m_clickedTimer->stop();
m_label->setText(QStringLiteral("鼠标双击!!"));
}


void DoubleSingleClicked::mousePressEvent(QMouseEvent *e)
{
if (Qt::LeftButton == e->button())
{
m_clickedTimer->start(300);
}
}


void DoubleSingleClicked::slotSingleClicked()
{
m_label->setText(QStringLiteral("鼠标单击!!"));
if (m_clickedTimer->isActive())
m_clickedTimer->stop();
}


欢迎加入Q群(565993954)进行技术交流、讨论!!


  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Qt中,可以通过以下两种方式来区分鼠标单击双击操作: 1. 使用QMouseEvent事件鼠标按下并释放时,会触发QMouseEvent事件。在处理QMouseEvent事件时,我们可以通过判断事件类型和时间间隔来区分单击双击操作。例如,我们可以使用QTime类记录上一次鼠标按下的时间,并在本次鼠标按下时计算时间间隔。如果时间间隔小于某个值(例如300ms),则认为是双击操作;否则认为是单击操作。 示例代码: ``` void Widget::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { static QTime lastClickTime; int interval = lastClickTime.elapsed(); lastClickTime.start(); if (interval < QApplication::doubleClickInterval()) { qDebug() << "double click"; } else { qDebug() << "single click"; } } } ``` 2. 使用QShortcut快捷键 QShortcut是Qt提供的一种快捷键机制。我们可以通过为Widget对象添加QShortcut对象来捕获鼠标单击双击事件。在QShortcut对象的构造函数中,我们可以设置快捷键的组合键和触发方式。例如,我们可以设置快捷键为鼠标左键,并设置触发方式为单击双击。在处理QShortcut对象的activated()信号时,我们就可以区分单击双击操作。 示例代码: ``` void Widget::initShortcuts() { QShortcut *singleClickShortcut = new QShortcut(QKeySequence(Qt::LeftButton), this); connect(singleClickShortcut, &QShortcut::activated, this, &Widget::handleSingleClick); QShortcut *doubleClickShortcut = new QShortcut(QKeySequence(Qt::LeftButton | Qt::DoubleClick), this); connect(doubleClickShortcut, &QShortcut::activated, this, &Widget::handleDoubleClick); } void Widget::handleSingleClick() { qDebug() << "single click"; } void Widget::handleDoubleClick() { qDebug() << "double click"; } ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值