自定义控件

自定义label:新建控件label 右键晋升为

//.h#ifndef CUSTOMLABEL_H#define CUSTOMLABEL_H#include <QWidget>#include <QLabel>class customLabel : public QLabel{    Q_OBJECTpublic:    explicit customLabel(QWidget *parent = nullptr);signals:public slots:};#endif // CUSTOMLABEL_H//.cpp#include "customlabel.h"customLabel::customLabel(QWidget *parent) : QLabel(parent){}

事件散发器:用于事件的散发,能够进行事件拦挡的操作。事件散发器返回布尔类型:bool event(QEvent ev),如果返回值为true,代表用户本人解决该事件,否者交给基类实现事件。应用步骤:重写event事件

事件过滤器:能够在程序散发到event事件之前再做一次高级拦挡。事件散发器返回布尔类型:bool eventfilter(QObjectobj,QEvent ev),如果返回值为true,代表用户本人解决该事件,否者交给基类实现事件。应用两个步骤:1.给控件装置事件过滤器;2.重写eventfilter事件。

#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>QT_BEGIN_NAMESPACEnamespace Ui { class MainWindow; }QT_END_NAMESPACEclass MainWindow : public QMainWindow{    Q_OBJECTpublic:    MainWindow(QWidget *parent = nullptr);    ~MainWindow();    //(1)通过事件散发器,拦挡鼠标事件    bool event(QEvent *ev);    //重写事件过滤器    bool eventFilter(QObject *,QEvent *);private:    Ui::MainWindow *ui;};#endif // MAINWINDOW_H
#include "mainwindow.h"#include "ui_mainwindow.h"#include <QDebug>#include <QEvent>#include <QMouseEvent>MainWindow::MainWindow(QWidget *parent)    : QMainWindow(parent)    , ui(new Ui::MainWindow){    ui->setupUi(this);    //步骤o1:装置事件过滤器    this->installEventFilter(this);    //步骤02:重写事件过滤器}MainWindow::~MainWindow(){    delete ui;}//(1)通过事件散发器,拦挡鼠标事件bool MainWindow::event(QEvent *e ){    //如果鼠标点击,在event事件散发器中,执行拦挡操作    if(e->type()==QEvent::MouseButtonPress)    {        //类型装换        QMouseEvent *ev=static_cast<QMouseEvent *>(e);        QString str=QString("拦挡了鼠标点击了事件");        qDebug()<<str;        return true;//true代表用户自主处理事件,不想下散发事件    }    //其余事件,交给父类解决    return QMainWindow::event(e);}//事件过滤器实现bool MainWindow::eventFilter(QObject *obj,QEvent *ev){    if (obj==ui->lab_test)    {        if(ev->type()==QEvent::MouseButtonPress)        {            //类型装换            QMouseEvent *ev=static_cast<QMouseEvent *>(ev);            QString str=QString("事件过滤器拦挡了鼠标点击");            qDebug()<<str;            return true;//true代表用户自主处理事件,不想下散发事件        }    }    return QWidget::eventFilter(obj,ev);}