QT学习之标签+鼠标/定时器
标签+鼠标
QEvent
需求鼠标进入控件范围会进行相关操作
在QEnterEvent类中
[virtual protected] void QWidget::enterEvent(QEnterEvent *event)
虚成员函数可以进行重写
实现鼠标进入或离开Lable会打印输出
新建一个父类为QWidget的名字为mylable的C++类文件
先声明在.h文件这
//鼠标进入事件 void enterEvent(QEnterEvent *event); //鼠标离开事件 void leaveEvent(QEvent *event);
在.cpp文件中实现为
//鼠标进入事件 void myLable::enterEvent(QEnterEvent *event) { qDebug() qDebug() Q_OBJECT public: explicit myLable(QWidget *parent = nullptr); //鼠标进入事件 void enterEvent(QEnterEvent *event); //鼠标离开事件 void leaveEvent(QEvent *event); signals: }; parent} {} //判断鼠标左键按下 if(ev-button() == Qt::LeftButton) { qDebug() qDebug() qDebug() //鼠标移动是一个连续的过程,因此不能直接==判断, 要用buttons来进行判断 if(ev-buttons() & Qt::LeftButton) { qDebug()parent} { setMouseTracking(true);//设置鼠标追踪 } //鼠标移动是一个连续的过程,因此不能直接==判断, 要用buttons来进行判断 if(ev-buttons() & Qt::LeftButton) { qDebug() ui-setupUi(this); //在构造函数中启动定时器 startTimer(1000);//参数1 时间间隔 单位ms } Widget::~Widget() { delete ui; } //定时器 void Widget::timerEvent(QTimerEvent *e) { static int num = 1;//变成全局变量 ui-label_2-setText(QString ::number(num++));//int转QString } ui-setupUi(this); //在构造函数中启动定时器 this-id1 = startTimer(1000);//参数1 时间间隔 单位ms this-id2 = startTimer(2000);//以2秒时间间隔运行 } Widget::~Widget() { delete ui; } //定时器 void Widget::timerEvent(QTimerEvent *e) { if(e-timerId() == id1) { static int num1 = 1;//变成全局变量 ui-label_2-setText(QString ::number(num1++));//int转QString } if(e-timerId() == id2) { static int num2 = 1;//变成全局变量 ui->label_3->setText(QString ::number(num2++));//int转QString } }
利用类QTimer
Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { ui->setupUi(this); //通过事件来操作定时器 //在构造函数中启动定时器 this->id1 = startTimer(1000);//参数1 时间间隔 单位ms this->id2 = startTimer(2000);//以2秒时间间隔运行 //定时器的第二种方式 QTimer *timer = new QTimer(this); timer->start(500);//0.5秒发出信号 connect(timer,&QTimer::timeout,this,[=](){ static int num3 = 1;//变成全局变量 ui->label_4->setText(QString ::number(num3++)); }); //也可以实现按下按钮定时器停止,利用 timer->stop(); }
事件分发器
在系统接收到信号时会通过一个事件分发器来管理事件,boo; event(QEvent * ev),返回值是bool类型,为true时说明用户要自己处理这个事件,不向下分发事件,进行事件的拦截。
可以针对鼠标事件进行事件的拦截操作案例
//拦截鼠标按下 bool myLable::event(QEvent *e) { if(e->type() == QEvent::MouseButtonPress) { qDebug()installEventFilter(this);//通过这个Widget来安装
2、重写eventfilter()
//重写eventFilter事件,第一个参数:控件,第二个参数:事件 bool Widget::eventFilter(QObject *watched, QEvent *event) { if(watched == ui->label ) { if(event->type() == QEvent::MouseButtonPress) { qDebug()
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。