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()
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!