Qt开发之鼠标事件
程序员文章站
2024-02-14 22:59:10
...
先简单说一下事件这个概念吧, 事件就是在应用界面的一个动作,可以是点击鼠标或者滑动鼠标等等一系列可以想象得到的操作
事件处理过程:
QApplication::exec() //主事件循环,检测是否有事件产生 一旦有事件产生,就会产生一个事件对象
1)在Qt内部,Qt通过QApplication::exec()启动的主事件循环不停的抓取事件队列中的事件
2)当事件发生时,Qt将创建一个事件对象。Qt中所有的事件类都继承自QEvent
3)在事件对象创建完毕后,Qt将这个事件传递给QObject的event()函数。event()函数并不直接处理事件, 而是按照事件对象的类型分派给特定的事件处理函数(event handler)。
event()函数主要用于事件的分发:
来通过代码学习吧
widget.h文件
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = nullptr);
~Widget();
protected:
void mousePressEvent(QMouseEvent *event);//鼠标点击事件
void mouseMoveEvent(QMouseEvent *event);//鼠标点击移动事件,键按下拖动鼠标变化的
void mouseDoubleClickEvent(QMouseEvent *event);//鼠标双击事件
void mouseReleaseEvent(QMouseEvent *event);//鼠标双击事件
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
widget.cpp文件
#include "widget.h"
#include "ui_widget.h"
#include <QMouseEvent>
#include <QDebug>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
}
Widget::~Widget()
{
delete ui;
}
void Widget::mousePressEvent(QMouseEvent *event)
{
qDebug()<<"鼠标点击坐标"<<event->x()<<","<<event->y()<<endl;
if(event->button()==Qt::LeftButton){
qDebug()<<"点击了左键"<<endl;
}else if(event->button()==Qt::RightButton){
qDebug()<<"点击了右键"<<endl;
}
}
void Widget::mouseMoveEvent(QMouseEvent *event){
qDebug()<<"鼠标点击不动的坐标"<<event->x()<<","<<event->y()<<endl;
}
void Widget::mouseDoubleClickEvent(QMouseEvent *event){
qDebug()<<"鼠标双击的坐标"<<event->x()<<","<<event->y()<<endl;
}
void Widget::mouseReleaseEvent(QMouseEvent *event){
qDebug()<<"鼠标释放了"<<endl;
}
具体效果大家可以操作学习查看。
上一篇: es6解构(destructuring)