C++版QT:鼠标事件

鼠标常用的事件可以说有一下几种:鼠标按下、鼠标移动、鼠标移动、鼠标双击和鼠标滚轮事件。

当你想使用他们,需要包含头文件:#include <QMouseEvent>

需要对鼠标事件进行处理时,通常要重新实现以下几个鼠标事件处理函数:

QWidget::mousePressEvent()
QWidget::mouseReleaseEvent()
QWidget::mouseDoubleClickEvent()
QWidget::mouseMoveEvent()

鼠标左键:Qt::LeftButton

鼠标中键:Qt::MidButton

鼠标右键:Qt::RightButton

下面是一个实例:

mouseevent.h

#ifndef MOUSEEVENT_H
#define MOUSEEVENT_H
​
#include <QMainWindow>
#include <QLabel>
#include <QStatusBar>
#include <QMouseEvent>
​
class MouseEvent : public QMainWindow
{
    Q_OBJECT
    
public:
    MouseEvent(QWidget *parent = 0);
    ~MouseEvent();
protected:
    void mousePressEvent(QMouseEvent *e);
    void mouseMoveEvent(QMouseEvent *e);
    void mouseReleaseEvent(QMouseEvent *e);
    void mouseDoubleClickEvent(QMouseEvent *e);
private:
    QLabel *statusLabel;
    QLabel *MousePosLabel;
};
​
#endif // MOUSEEVENT_H
​

mouseevent.cpp

#include "mouseevent.h"
#pragma execution_character_set("utf-8")
MouseEvent::MouseEvent(QWidget *parent)
    : QMainWindow(parent)
{
    setWindowTitle(tr("鼠标事件"));
    statusLabel = new QLabel;
    statusLabel->setText(tr("当前位置:"));
    statusLabel->setFixedWidth(100);
    MousePosLabel = new QLabel;
    MousePosLabel->setText(tr(""));
    MousePosLabel->setFixedWidth(100);
    statusBar()->addPermanentWidget(statusLabel);
    statusBar()->addPermanentWidget(MousePosLabel);
    this->setMouseTracking(true);
    resize(400,200);
}
​
MouseEvent::~MouseEvent()
{
    
}
​
void MouseEvent::mousePressEvent(QMouseEvent *e)
{
    QString str="("+QString::number(e->x())+","+QString::number(e->y())+")";
    if(e->button()==Qt::LeftButton)
    {
        statusBar()->showMessage(tr("左键:")+str);
    }
    else if(e->button()==Qt::RightButton)
    {
        statusBar()->showMessage(tr("右键:")+str);
    }
    else if(e->button()==Qt::MidButton)
    {
        statusBar()->showMessage(tr("中键:")+str);
    }
}
​
void MouseEvent::mouseMoveEvent(QMouseEvent *e)
{
    MousePosLabel->setText("("+QString::number(e->x())+", "+QString::number(e->y())+")");
}
​
void MouseEvent::mouseReleaseEvent(QMouseEvent *e)
{
    QString str="("+QString::number(e->x())+","+QString::number(e->y())+")";
    statusBar()->showMessage(tr("释放在:")+str,3000);
}
​
void MouseEvent::mouseDoubleClickEvent(QMouseEvent *e){}
​

main.cpp

#include "mouseevent.h"
#include <QApplication>
​
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MouseEvent w;
    w.show();
    
    return a.exec();
}
​

相关推荐

  1. qt hoverMoveEvent鼠标响应事件

    2024-01-23 17:52:05       61 阅读
  2. Qt 鼠标进入离开事件

    2024-01-23 17:52:05       58 阅读
  3. Qt 鼠标按下移动释放事件

    2024-01-23 17:52:05       47 阅读
  4. Qt | 鼠标事件第四节

    2024-01-23 17:52:05       28 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-23 17:52:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-23 17:52:05       101 阅读
  3. 在Django里面运行非项目文件

    2024-01-23 17:52:05       82 阅读
  4. Python语言-面向对象

    2024-01-23 17:52:05       91 阅读

热门阅读

  1. MySQL新增、管理用户,控制访问【新手向】

    2024-01-23 17:52:05       58 阅读
  2. Qt容器QVector

    2024-01-23 17:52:05       54 阅读
  3. 程序员裁员潮:技术变革下的职业危机

    2024-01-23 17:52:05       52 阅读
  4. Map转成String,String 转换成Map

    2024-01-23 17:52:05       52 阅读
  5. 牛客周赛 Round 29 (A-E , c++)

    2024-01-23 17:52:05       61 阅读
  6. Docker安装步骤

    2024-01-23 17:52:05       51 阅读