QT5.7 实战项目 鼠标事件的触发

1.mouseevent.h

#ifndef MOUSEEVENT_H
#define MOUSEEVENT_H

#include <QMainWindow>
#include <QLabel>
#include <QStatusBar>
#include <QMouseEvent>

namespace Ui {
class MouseEvent;
}

class MouseEvent : public QMainWindow
{
    Q_OBJECT

public:
    explicit 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;
    Ui::MouseEvent *ui;
};

#endif // MOUSEEVENT_H

2.mouseevent.cpp

#include "mouseevent.h"
#include "ui_mouseevent.h"
#pragma execution_character_set("utf-8")
MouseEvent::MouseEvent(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MouseEvent)
{
    setWindowTitle(tr("鼠标事件"));     //设置窗体的标题
    statusLabel=new QLabel; //创建QLabel控件statusLabel,用于显示鼠标移动时的实时位置
    statusLabel->setText(tr("当前位置"));
    statusLabel->setFixedWidth(100);
    MousePosLabel=new QLabel;   //创建QLabel控件MousePosLabel,用于显示鼠标按下或释放时的位置
    MousePosLabel->setText(tr(""));
    MousePosLabel->setFixedWidth(100);
    statusBar()->addPermanentWidget(statusLabel);   //在QMain Window的状态栏中增加控件
    statusBar()->addPermanentWidget(MousePosLabel);
    this->setMouseTracking(true);   //设置窗体追踪鼠标。设置窗体是否追踪鼠标。
    resize(400,200);
}

MouseEvent::~MouseEvent()
{
    delete ui;
}
//mousePressEvent()函数为鼠标按下事件响应函数,QMouseEvent类的button()
//方法可以获得发生鼠标事件的按键属性(左键,右键,中键)。
void MouseEvent::mousePressEvent(QMouseEvent *e)
{
    //QMouseEvent类的x()和y()方法可以获得鼠标相对于接收事件的窗体位置
    //globalX()he
    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)
{
    //鼠标移动事件的响应函数,QMouseEvent类的x()和y()方法可以获得鼠标的相对位置,即相对于应用程序的位置。
    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)
{

}

3.main.cpp

#include "mouseevent.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MouseEvent w;
    w.show();

    return a.exec();
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寰宇C++

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值