Qt 事件

在这里插入图片描述
自定义控件的时候基类不能搞错,否则无法提升。

在这里插入图片描述
接着在mylabel.h和mylabel.cpp中把基类都改成QLabel;

#include "mylabel.h"

MyLabel::MyLabel(QWidget *parent) : QLabel(parent)
{

}

#ifndef MYLABEL_H
#define MYLABEL_H

#include <QWidget>
#include <QLabel>
class MyLabel : public QLabel
{
    Q_OBJECT
public:
    explicit MyLabel(QWidget *parent = nullptr);

signals:

};

#endif // MYLABEL_H

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
提升以后发现label由原来的QLabel类的对象变成了MyLabel类的对象;
在这里插入图片描述
接下来开始写事件函数,代码如下:
mylabel.h

#ifndef MYLABEL_H
#define MYLABEL_H

#include <QWidget>
#include <QLabel>
class MyLabel : public QLabel
{
    Q_OBJECT
public:
    explicit MyLabel(QWidget *parent = nullptr);

protected:
    //鼠标点击事件
    void mousePressEvent(QMouseEvent *ev);//都是虚函数
    //鼠标移动事件
    void mouseMoveEvent(QMouseEvent *ev);
    //鼠标释放事件
    void mouseReleaseEvent(QMouseEvent *ev);
    //进入窗口区域
    void enterEvent(QEvent*);
    //离开窗口区域
    void leaveEvent(QEvent*);



signals:

};

#endif // MYLABEL_H

mywidget.h

#ifndef MYWIDGET_H
#define MYWIDGET_H

#include <QWidget>
#include<QTimerEvent>

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*);


private:
    Ui::MyWidget *ui;
    int timer_1;//计时器1
    int timer_2;//计时器2
};
#endif // MYWIDGET_H

mylabel.cpp

#include "mylabel.h"
#include<QMouseEvent>
#include<QDebug>
MyLabel::MyLabel(QWidget *parent) : QLabel(parent)
{
    //设置追踪鼠标
    this->setMouseTracking(true);//这句话加了以后,运行程序后鼠标不需要按着就可以移动显示坐标

}

void MyLabel::mousePressEvent(QMouseEvent *ev)
{
    int i=ev->x();
    int j=ev->y();
    if(ev->button()==Qt::LeftButton)
    {
        QString text=QString("Press(%1,%2)").arg(i).arg(j);
        this->setText(text);
    }

}
void MyLabel::mouseReleaseEvent(QMouseEvent *ev)
{
    int i=ev->x();
    int j=ev->y();


    QString text=QString("Release(%1,%2)").arg(i).arg(j);
    this->setText(text);


}
void MyLabel::mouseMoveEvent(QMouseEvent *ev)
{
    int i=ev->x();
    int j=ev->y();


    QString text=QString("Move(%1,%2)").arg(i).arg(j);
    this->setText(text);


}
void MyLabel::enterEvent(QEvent*ev)
{
    qDebug()<<"Enter";

}
void MyLabel::leaveEvent(QEvent*ev)
{
    qDebug()<<"Leave";
}

mywidget.cpp

#include "mywidget.h"
#include "ui_mywidget.h"
#include<QKeyEvent>
#include<QDebug>
MyWidget::MyWidget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::MyWidget)
{
    ui->setupUi(this);

    timer_1=this->startTimer(1000);//开启计时器1,毫秒为单位
    timer_2=this->startTimer(500);//开启计时器2


}

MyWidget::~MyWidget()
{
    delete ui;
}
void MyWidget::keyPressEvent(QKeyEvent *event)//QKeyEvent-->F1-->key()-->Qt::Key
{
    if(event->key()==Qt::Key_A)
    {
        qDebug()<<"Qt::Key_A";
    }
}

void MyWidget:: timerEvent(QTimerEvent*e)
{
    if(e->timerId()==timer_1)
    {
        static int t1=0;
        ui->label_timer_1->setText(QString("%1").arg(t1));
        t1++;

        if(t1==10)
        {
            killTimer(timer_1);
        }
    }
    if(e->timerId()==timer_2)
    {
        static double t2=0;
        ui->label_timer_2->setText(QString("%1").arg(t2));
        t2+=0.5;
        if(t2==10)
        {
            killTimer(timer_2);
        }

    }

}

发布了241 篇原创文章 · 获赞 4 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/ShenHang_/article/details/104954925