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指针的绑定。

相关推荐
豆沙沙包?4 小时前
2026年--Lc329-735. 小行星碰撞(栈)--java版
java·开发语言
weibkreuz4 小时前
收集表单数据@10
开发语言·前端·javascript
赵民勇5 小时前
Qt QML Component.onCompleted 和 Component.onDestruction 详解
qt
liulilittle5 小时前
XDP VNP虚拟以太网关(章节:一)
linux·服务器·开发语言·网络·c++·通信·xdp
我不是8神5 小时前
Qt 知识点全面总结
开发语言·qt
Ralph_Y5 小时前
多重继承与虚继承
开发语言·c++
今晚务必早点睡5 小时前
写一个Python接口:发送支付成功短信
开发语言·python
jghhh015 小时前
基于C#实现与三菱FX系列PLC串口通信
开发语言·算法·c#·信息与通信
ada7_5 小时前
LeetCode(python)22.括号生成
开发语言·数据结构·python·算法·leetcode·职场和发展
喵了meme5 小时前
C语言实战练习
c语言·开发语言