自定义控件
自定义label:新建控件label 右键提升为
//.h
#ifndef CUSTOMLABEL_H
#define CUSTOMLABEL_H
#include <QWidget>
#include <QLabel>
class customLabel : public QLabel
{
Q_OBJECT
public:
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_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
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);
}
相关文章
暂无评论...