自定义控件的时候基类不能搞错,否则无法提升。
接着在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);
}
}
}