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。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!
