QT新增自定义控件类并在QT Designer中将系统父类替换

文章介绍了在Qt开发中如何创建自定义子类(如LNTreeWidget)并替代系统类QTreeWidget。通过QTDesigner的提升功能,可以在UI设计中使用自定义控件,并重载特定事件(如enterEvent和leaveEvent)以实现自定义逻辑。修改UI文件和相关头文件引用后,自定义行为将在新类中实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、新增自定义子类并在QT Designer中将系统父类修改掉

qt中经常会遇到系统提供的UI控件类无法满足使用要求,因此需要自定义相关的类。

一般步骤为:创建自定义类,继承系统类。

此时分为两种情况,若是直接在cpp中书写布局的方式,那么直接使用该自定义类即可。

若是已经在qt designer中布局好了,那么需要通过修改qt designer中的类来达到目的。

本文主要阐述这种方式。

以QTreeWidget为例,我需要新建一个自定义类名为LNTreeWidget。在默认的MainWindow.cpp/h/ui中,已经使用了大量的QTreeWidget。

1、首先,对QtreeWidget做一个自定义封装,创建一个自定义子类LNTreeWidget继承自QtreeWidget:

#ifndef LNTREEWIDGET_H
#define LNTREEWIDGET_H
#include<QTreeWidget>
#include<QEvent>

class LNTreeWidget:public QTreeWidget
{
public:
     LNTreeWidget(QWidget *parent = nullptr);
protected:
    void enterEvent(QEnterEvent *event) override;
    void leaveEvent(QEvent *event) override;
};

#endif // LNTREEWIDGET_H

重载了enterEvent和leaveEvent,鼠标移入移出事件,在cpp中做对应处理(这里是自定义的逻辑,不是本文重点,不再赘述)

2、修改mainwindow.ui 文件,即在qt 设计器的UI界面中修改。

选择Qtreewidget控件,右键菜单->提升为

然后在弹窗的“提升的类名”输入框中输入LNTreewidget,如下图:

 点击“提升”,即可生效。也就是说在mainwindow中的qtreewidget实际上已经被替换成了LNTreewidget。

而我们需要自定义的一些行为,直接在LNTreewidget.h/cpp中自己实现即可。

此时,qt帮我们做了几件事:

1、mainwindow.ui 文件中自动将qtreewidget节点修改为了LNTreewidget。

2、mainwindow.ui下方新增了相关的头文件引用。如下图:

3、在自动生成的mainwindow.h头文件中,可以看到自动添加了

#include <lntreewidget.h>

二、mainwindow.ui 和设计器界面,以及ui_mainwindow.h的关系

1、mainwindow.ui

首先上传代码仓库的实际上就是mainwindow.ui文件,本质上为一个xml文件,内部包含了ui布局生成的逻辑关系。如下图:

 qt designer 设计器界面上,实际上是加载了这份ui文件而生成的可操作界面。我们可以直接修改设计器界面,也可以修改mainwindow.ui这个文件。实际的修改都会被上传到代码仓库。

2、ui_mainwindow.h

这个文件实际上就是将mainwindow.ui转换成了c++代码,以头文件的形式展示。是一份临时文件,会被用来编译生成最终程序的。

它是不会出现在代码仓库中的,每次我们修改.ui之后,重新编译都会新生成一分.h,在工程目录中的debug/release中可以找到。如下图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值