QT学习之标签+鼠标/定时器

2024-06-09 1982阅读

标签+鼠标

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()
VPS购买请点击我

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

目录[+]