Qt 控件使用铁律

1. Qt 自定义控件「UI 提升」的铁律

✅ UI 设计师拖入Widget → 提升为Event类 → Qt 自动生成ui->tw_info_1,这是绑定到界面的有效对象绝对不要用 new 覆盖

✅ 该对象的ui->tableWidget已由setupUi初始化,可直接调用配置函数。

2. Qt 控件使用铁律(控件显示的 3 个必要条件)

有父对象new 类名(this) 或 设计师拖拽,否则是游离对象;

有布局挂载 :控件必须加入QVBoxLayout/QHBoxLayout,否则无法绘制;

完成初始化 :自定义控件必须执行ui->setupUi(this),否则内部子控件无效。

3. 指针赋值的核心原则

先赋值有效指针,后调用函数

设计师的ui->xxx是黄金指针:无需 new、已初始化、已挂载,直接复用即可;

绝对不要用空对象 (new 的游离对象) 覆盖UI 里的有效对象tab_info[i] = ui->xxx 后,不要再执行tab_info[i] = new xxx()


ui->setupUi(this) 是什么 & 核心作用

✅ 本质定义

ui->setupUi(this)Qt UIC 工具 将你在「Qt 设计师」中绘制的.ui界面文件,自动生成的初始化函数 ,是Qt 可视化界面与 C++ 代码之间的桥梁核心,无此函数,设计师里拖的所有控件(按钮、表格、自定义控件)全部无效。

✅ 核心一句话作用

为当前窗口 / 自定义控件(this指向的对象)创建、实例化、绑定 所有在 Qt 设计师中拖入的子控件,并完成控件的父子关系绑定、布局挂载、基础属性初始化三大核心工作。

工作 1:实例化所有子控件 + 绑定父子关系(对应铁律✅「有父对象」)

这是控件能显示的第一前提 ,Qt 中无父对象的控件是「游离控件」,永远不会在界面上绘制

✅ 执行细节

  1. 函数内部会根据.ui文件的描述,自动new出所有你拖入的控件(按钮、TableWidget、自定义 Event 控件等);

  2. 强制将这些子控件的父对象设置为setupUi(this)的入参this(即当前窗口 / 自定义控件);

  3. 形成「父控件 → 子控件」的树形结构,Qt 的父子对象机制会自动管理子控件的内存、显示、销毁。

工作 2:挂载控件到布局 + 完成布局初始化(对应铁律✅「有布局挂载」)

这是控件能在指定位置正常显示 的核心,Qt 中控件未加入布局,即使有父对象,也会被挤压至 0 像素 / 显示在左上角

✅ 执行细节

  1. 函数会根据你在设计师中设置的布局(QVBoxLayout/QHBoxLayout/QGridLayout),自动将所有子控件添加到对应布局中

  2. 初始化布局的拉伸策略、间距、对齐方式、边距等属性;

  3. 触发布局的「尺寸计算」,让子控件根据布局规则,自动分配显示空间。

工作 3:初始化控件 + 绑定内部 UI 指针(对应铁律✅「完成初始化」)

这是自定义控件内部子控件可用 的唯一途径,也是你Event类中ui->tableWidget能被调用的前提。

✅ 执行细节

  1. 初始化ui指针 :为当前类的Ui::XXX *ui成员指针分配内存,让ui成为「设计师控件」的唯一操作入口;

  2. 初始化控件基础属性 :将你在设计师中设置的控件属性(尺寸、文本、字体、隐藏 / 显示、表格行列数等),同步到 C++ 代码的控件对象中

  3. 绑定自定义控件 :若你在设计师中把Widget提升为Event类,setupUi会自动将该控件的类型转为Event*,并完成内部ui指针的绑定。

相关推荐
灰子学技术6 小时前
go response.Body.close()导致连接异常处理
开发语言·后端·golang
二十雨辰7 小时前
[python]-AI大模型
开发语言·人工智能·python
Yvonne爱编码7 小时前
JAVA数据结构 DAY6-栈和队列
java·开发语言·数据结构·python
Re.不晚7 小时前
JAVA进阶之路——无奖问答挑战1
java·开发语言
你这个代码我看不懂7 小时前
@ConditionalOnProperty不直接使用松绑定规则
java·开发语言
pas1367 小时前
41-parse的实现原理&有限状态机
开发语言·前端·javascript
琹箐8 小时前
最大堆和最小堆 实现思路
java·开发语言·算法
Monly218 小时前
Java:修改打包配置文件
java·开发语言
我命由我123458 小时前
Android 广播 - 静态注册与动态注册对广播接收器实例创建的影响
android·java·开发语言·java-ee·android studio·android-studio·android runtime
island13149 小时前
CANN ops-nn 算子库深度解析:核心算子(如激活函数、归一化)的数值精度控制与内存高效实现
开发语言·人工智能·神经网络