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();
}
发布了177 篇原创文章 · 获赞 5 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/aa804738534/article/details/104729139
今日推荐