QT -- 自定义控件 事件分发器/过滤器

云计算舵手
• 阅读 730

自定义控件

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

QT -- 自定义控件 事件分发器/过滤器

QT -- 自定义控件 事件分发器/过滤器

QT -- 自定义控件 事件分发器/过滤器

//.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事件。

QT -- 自定义控件 事件分发器/过滤器

#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);
}
点赞
收藏
评论区
推荐文章
Stella981 Stella981
3年前
C# WinForm窗体控件Panel修改边框颜色以及边框宽度方法
CWinForm窗体控件Panel修改边框颜色以及边框宽度方法1.新建组件这里可以自定义一个Panel控件起名为PanelEx !(https://oscimg.oschina.net/oscnet/99045
Stella981 Stella981
3年前
QT使用label显示图片或者gif并自动适应label尺寸
显示图片1.在ui界面拖动label控件至界面。2.将想要显示的图片加入qt资源库。3.添加图片至label(利用setPixmap函数)。4.自使用label尺寸(利用setScaledContents函数)。未自适应label大小的效果:!在这里插入图片描述(https://oscimg.oschina.
Wesley13 Wesley13
3年前
JavaFX入门:简单Demo
零、最终目标通过两种方式(纯代码控制、FXML),实现一个简单的登录界面:Paste\_Image.png涉及到的控件:文本(Text,动态显示内容)、标签(Label,显示文本)、文本域(TextField,用户交互输入)、按钮(Button,登录点击)一、控件通过Code动态添加实现方法
Stella981 Stella981
3年前
Qt自定义控件大全+designer源码
抽空将自定义控件的主界面全部重写了一遍,采用左侧树状节点导航,看起来更精美高大上一点,后期准备单独做个工具专用每个控件的属性设计,其实qt自带的designer就具备这些功能,于是从qt4的源码中抽取出来,总共才1MB不到,不得不佩服Qt公司的程序员,写的很厉害。特意将自定义控件作为插件封装到了designer中,打开designer就从左侧控件栏中可以看到
Stella981 Stella981
3年前
Qt编写自定义控件16
前言五一期间一直忙着大屏电子看板软件的开发,没有再去整理控件,今天已经将大屏电子看板的所有子窗口都实现了任意停靠和双击独立再次双击最大化等功能,过阵子有空再写一篇文章介绍其中的技术点。魔法老鼠控件,来自Qt自带的demo,我只是将其修改了部分颜色接口等。实现的功能1:可设置身体眼睛眼珠鼻子尾巴的颜色2:
Stella981 Stella981
3年前
Android自定义控件之自定义属性
前言自定义控件可以说是android里的一个门槛,对很多android开发者来说可能都会认为比较难,当然这也是成为一个高手的必经之路,因此我准备在定义控件上多下些功夫,多花点时间研究,多写博客,如果想一起学习自定义控件,欢迎大家关注,如有疑问欢迎留言,如有谬误欢迎批评指正。目录!(https://imgconvert.csdnim
Stella981 Stella981
3年前
Qt TableWidget 控件 及自定义委托
点击上方蓝字可直接关注公众号哦,方便下次阅读~上次和大家分享了TreeWidget的简单使用,本次和大家分享下TableWidget的简单应用以及项目视图中的自定义委托。以前上学的时候,经常要填写各种各样的统计信息,工作之后办理证件时也要填写各种各样的表格(电子的~),这里的“表格”和TableWidget几乎是相同的。引入这么一个日常的应用
Stella981 Stella981
3年前
Qt编写自定义控件59
一、前言直方动态图类似于音乐播放时候的柱状图展示,顶部提供一个横线条,当柱状上升的时候,该线条类似于帽子的形式冲到顶端,相当于柱状顶上去的感觉,给人一种动态的感觉,听音乐的同时更加赏心悦目,原理比较简单,就是用2个定时器,一个定时器间隔比较短,负责快速把柱状图从底部冲到设置的值,同时横线条跟随一起冲上去,一个定时器负责慢慢的跌落值到0,然后横线
Stella981 Stella981
3年前
Qt 自定义控件 定时器
参考文章:https://blog.csdn.net/anyuliuxing/article/details/96604213(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fblog.csdn.net%2Fanyuliuxing%2Farticle%2Fdetails%2F966042
云计算舵手
云计算舵手
Lv1
重要的人要干干净净的放在心上。
文章
2
粉丝
0
获赞
0