QT新增自定义控件类并在QT Designer中将系统父类替换
创始人
2025-06-01 04:04:01
0

一、新增自定义子类并在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
#includeclass 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 

二、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中可以找到。如下图:

相关内容

热门资讯

最新或2023(历届)镇江中学... 昨天,江苏省教育厅发布消息确定今年暑假时间,将从7月10日开始至8月31日结束。8月30日、31日报...
最新或2023(历届)苏州中学... (1)最新或2023(历届)春季,全市中小学幼儿园均于2月22 日(学生2月21日报到)正式开学。(...
最新或2023(历届)南通中学... 最新或2023(历届)南通市中小学暑假放假时间: 最新或2023(历届)7月1日至8月31日 ...
最新或2023(历届)扬州中学... 记者昨从有关部门获悉,今年全省暑假时间确定,将从7月10日开始至8月31日结束。在经历史上最长春学期...
最新或2023(历届)常州中学... 6月16日获悉,根据江苏省教育厅文件规定,最新或2023(历届)我市中小学和幼儿园放假时间统一为7月...
最新或2023(历届)南京中学... 南京市中小学放假安排  第一学期:  最新或2023(历届)9月1日(星期一)开学;第12周中小学期...
最新或2023(历届)连云港中... 最新或2023(历届)连云港市中小学暑假放假时间: 最新或2023(历届)7月1日至8月31日...
最新或2023(历届)徐州中学... 今年徐州市中小学幼儿园放假时间统一为7月10日至8月31日。8月30日、31日报到。9月1日正式上课...
最新或2023(历届)江苏省中... 昨天,江苏省教育厅发布消息确定今年暑假时间,将从7月10日开始至8月31日结束。8月30日、31日报...
最新或2023(历届)无锡中学... 无锡市教育局发布通知,全市义务教育阶段学校、幼儿园、普通高中统一从7月1日起放暑假,中等职业学校、技...
最新或2023(历届)朝阳中学... 最新或2023(历届)9月1日(星期二)开学; 最新或2023(历届)1月22日(星期五)结束...
最新或2023(历届)盘锦中学... 最新或2023(历届)辽宁暑假放假时间表,辽宁幼儿园中小学高中暑假放假时间和开学时间安排通知已经下发...
最新或2023(历届)葫芦岛中...  暑假是从最新或2023(历届)7月13日(星期三)至8月31日(星期三)放暑假,共7周零1天。  ...
最新或2023(历届)铁岭中学... 最新或2023(历届)辽宁暑假放假时间表,辽宁幼儿园中小学高中暑假放假时间和开学时间安排通知已经下发...
最新或2023(历届)幼儿园家... 幼儿园家长会教师发言稿一各位家长:  大家好!你们的到来是对我们工作最有力的支持。谢谢!我国教育大力...
最新或2023(历届)初二家长... 初二家长会班主任发言稿一尊敬的各位家长:  下午好!很高兴因为孩子,我们走到了一起。首先请允许我代表...
最新或2023(历届)七年级家... 七年级家长会发言稿一  尊敬的各位家长、老师,亲爱的同学们:大家晚上好!  我是708班的班主任,作...
最新或2023(历届)三年级小... 三年级小学家长会发言稿一各位家长:  下午好!  首先感谢各位家长在百忙中抽出时间来参加这次家长会,...
最新或2023(历届)五年级家... 五年级家长会发言稿一尊敬的各位家长:  大家好!感谢各位对我班工作的大力支持,能从百忙中抽出时间来参...
最新或2023(历届)二年级家... 最新或2023(历届)二年级家长会班主任发言稿一尊敬的各位家长:  你们好!感谢你们在百忙之中抽时间...