Qt event

本文介绍了一个使用Qt实现的自定义控件MyLabel及包含该控件的MyWidget组件。MyLabel通过重写鼠标事件处理函数实现了鼠标点击事件响应,并显示点击位置。MyWidget则演示了如何使用定时器更新UI。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mylabel.cpp## 标题

#include "mylabel.h"
#include<QMouseEvent>
#include<QString>//字符串
MyLabel::MyLabel(QWidget *parent) : QLabel(parent)
{
  //设置追踪鼠标
    this->setMouseTracking(true );
}
void MyLabel::mousePressEvent(QMouseEvent *ev)
{
    int i = ev->x();
    int j = ev->y();
    QString text = QString("<center><h1>Mouse Press:(%1,%2)</h1></center>").arg(i).arg(j);
    this->setText(text);

}
void MyLabel::mouseReleaseEvent(QMouseEvent *ev)
{

}
void MyLabel::mouseMoveEvent(QMouseEvent *ev)
{

}
void MyLabel::enterEvent(QEvent *ev)
{
    QString text = QString("<center><h1>Mouse enter</h1><center>");
    this->setText(text  );
}
void MyLabel::leaveEvent(QEvent *ev)
{
    QString text = QString("<center><h1>Mouse leave</h1><center>");
    this->setText(text);
}

mywidget.cpp

#include "mywidget.h"
#include "ui_mywidget.h"

MyWidget::MyWidget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::MyWidget)
{
    ui->setupUi(this);
    //启动计时器
    timerID = this->startTimer(1000);//单位ms

}

MyWidget::~MyWidget()
{
    delete ui;
}
void MyWidget::keyPressEvent(QKeyEvent *event)
{

}
void MyWidget::timerEvent(QTimerEvent *event)
{
     static int sec = 0;
     ui->label->setText(QString("<center><h1>timer out:%1</h1><center>")
                        .arg(sec++  ));
     if(5 ==sec )
         {
         this->killTimer(this->timerID  );
     }

}

mylabel.h

#ifndef MYLABEL_H
#define MYLABEL_H

#include <QLabel>
#include<QWidget>
class MyLabel : public QLabel
{
    Q_OBJECT
public:
    explicit MyLabel(QWidget *parent = nullptr);
protected:
    void mousePressEvent(QMouseEvent *ev);
    void mouseReleaseEvent(QMouseEvent *ev);
    void mouseMoveEvent(QMouseEvent *ev);
    //进入窗口区域
    void enterEvent(QEvent * ev);
    //离开窗口事件
    void leaveEvent(QEvent *ev);

signals:

};

#endif // MYLABEL_H

mywidget.h

#ifndef MYWIDGET_H
#define MYWIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class MyWidget; }
QT_END_NAMESPACE

class MyWidget : public QWidget
{
    Q_OBJECT

public:
    MyWidget(QWidget *parent = nullptr);
    ~MyWidget();
protected:
    void keyPressEvent(QKeyEvent *event);
    //计时器事件
    void timerEvent(QTimerEvent *event  );
private:
    Ui::MyWidget *ui;
    int timerID;
};
#endif // MYWIDGET_H

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值