首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Qt 窗口鼠标消息处理

Qt 窗口鼠标消息处理

作者头像
我与梦想有个约会
发布2023-10-20 17:42:18
发布2023-10-20 17:42:18
7500
举报
文章被收录于专栏:jiajia_dengjiajia_deng

在继承了 QWidget 窗口类以后,我们可以实现很多父类提供的虚函数,其中就包括鼠标的诸多消息处理函数,比如 mousePressEvent(鼠标单击消息)、mouseReleaseEvent(鼠标弹起消息)等等,这些虚函数我们可以通过 Qt 的帮助文档查看,如下:

只要你重写这些提供的虚函数,就可以捕获对应的消息,下面我们做了一些鼠标消息的小例子,借这些例子,你也可以覆写一些键盘等方面的消息处理虚函数。 【实现代码】 代码分三个文件,分别为(参考 使用 Qt 构建一个简单的窗体程序 ):

  • main.c:创建应用程序框架,调用 CWidget 窗口的入口函数。
  • CWidget.h:继承 QWidget 类。
  • CWidget.cpp:覆写鼠标等消息函数的实现
代码语言:javascript
复制
#include 
#include “cwidget.h”
int main(int argc, char* argv[])
{
    QApplication app(argc, argv);
CWidget w;
w.show();

return app.exec();
}
#ifndef CWIDGET_H
#define CWIDGET_H
#include 
#include 
#include 
class CWidget : public QWidget
{
    Q_OBJECT
public:
    explicit CWidget(QWidget *parent = 0);
// 鼠标按下消息
void mousePressEvent(QMouseEvent \*);
// 鼠标松开消息
void mouseReleaseEvent(QMouseEvent \*);
// 鼠标双击消息,有bug,会产生一次 mousePressEvent
void mouseDoubleClickEvent(QMouseEvent \*);
// 鼠标移动消息,默认要在触发了mousePressEvent后才生效
// 需要在构造函数中调用 this->setAttribute(Qt::WA\_MouseTracking);
void mouseMoveEvent(QMouseEvent \*);

// 鼠标进入窗口范围内消息
void enterEvent(QEvent \*);
// 鼠标离开窗口范围内消息
void leaveEvent(QEvent \*);
signals:
public slots:
};
#endif // CWIDGET_H
#include “cwidget.h”
CWidget::CWidget(QWidget *parent) : QWidget(parent)
{
    this->setAttribute(Qt::WA_MouseTracking);
}
void CWidget::mousePressEvent(QMouseEvent *ev)
{
    // 鼠标左键单击
    if (ev->button() == Qt::LeftButton)
    {
        qDebug() << “left button down…”;
    }
    // 鼠标右键单击
    else if (ev->button() == Qt::RightButton)
    {
        qDebug() << “right button down…”;
    }
// 判断是否按下了 alt 键
if (ev->modifiers() == Qt::AltModifier)
{
    qDebug() << "alt is down...";
}
// 判断是否按下了 CTRL 键
if (ev->modifiers() == Qt::CTRL)
{
    qDebug() << "ctrl is down...";
}
}
void CWidget::mouseReleaseEvent(QMouseEvent *ev)
{
    // 鼠标左键单击弹起
    if (ev->button() == Qt::LeftButton)
    {
        qDebug() << “left button up…”;
    }
    // 鼠标右键单击弹起
    else if (ev->button() == Qt::RightButton)
    {
        qDebug() << “right button up…”;
    }
}
void CWidget::mouseDoubleClickEvent(QMouseEvent *)
{
    // 双击消息,会产生一次 mousePressEvent
    qDebug() << “doubleClick…”;
}
void CWidget::mouseMoveEvent(QMouseEvent *)
{
    // 鼠标移动
    qDebug() << “mouse move…”;
}
void CWidget::enterEvent(QEvent *)
{
    qDebug() << “mouse enter…”;
}
void CWidget::leaveEvent(QEvent *)
{
    qDebug() << “mouse leave…”;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015-06-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档