Qt Designer是Qt Creator中核心UI设计工具,必须双击.ui文件进入设计模式才能拖放控件;未设布局则控件消失;需正确设置objectName、声明槽函数并确保uic生成ui_*.h文件。

Qt Designer 是 Qt Creator 里真正干活的 UI 工具,不是“辅助插件”,而是和 qmake / CMake 同级的核心组件。双击 mainwindow.ui 进入设计模式后,它才开始工作——别指望在编辑模式下拖控件。
双击 .ui 文件才能进真正的设计器
很多人卡在第一步:点开 mainwindow.cpp 或 mainwindow.h 后拼命找“拖拽区”,结果什么也没有。原因很简单:Qt Designer 只响应 .ui 文件。必须双击项目中的 mainwindow.ui(或任意 *.ui),Qt Creator 才会切换到设计模式,并加载可视化编辑器。
常见错误现象:
- 点击
mainwindow.cpp后右键选“Open in Design Mode”——无效,该菜单仅对.ui文件可用 - 手动新建空文件并命名为
test.ui,但没在.pro中声明FORMS += test.ui——保存后不会被编译,运行时 UI 不生效 - 在设计模式下改完界面,却忘了保存(Ctrl+S)——关闭窗口后修改丢失,
ui_mainwindow.h不会更新
控件拖不进去?先检查布局容器
把 PushButton 往空白窗体上拖,松手后直接消失,不是 Bug,是 Qt 的布局机制在起作用:没有布局管理器(Layout)的 widget 是“自由浮动”的,会被视为无效尺寸,渲染时自动折叠。
正确做法:
- 拖一个
Widget或MainWindow模板进来后,**立刻右键 → “Lay out” → 选Vertical Layout或Grid Layout** - 再往这个带布局的容器里拖按钮、标签、输入框——它们会自动吸附、等宽/等高排列
- 如果已拖入控件但没布局,选中多个控件 → 右键 → “Lay out horizontally/vertically” 也能补救
注意:QVBoxLayout 和 QHBoxLayout 是代码里最常用的布局类,设计器里对应的就是那几个“Lay out”菜单项;而 QGridLayout 对应“Grid Layout”,适合表单类界面。
信号槽连不上?看对象名和类继承链
点按钮想触发函数,打开“Edit Signals/Slots” 模式(小闪电图标),拖线失败,多数是因为目标对象没暴露为可连接对象。
关键条件:
- 目标 widget 必须有唯一且合法的
objectName(默认是pushButton、lineEdit等,不能含空格或中文) - 你写的槽函数必须定义在
MainWindow类(或其父类)中,且声明为public slots:或private slots: -
ui->setupUi(this)必须在构造函数里调用,否则ui->pushButton指针为空,连接无意义
示例:若你在 mainwindow.h 里写了 void on_pushButton_clicked();,设计器会自动识别并列出;但若写成 void handleClick();,就得手动在“Go to slot”里选中信号后粘贴函数名,再确保 mainwindow.cpp 里有对应实现。
改完 UI 为什么没效果?确认 moc 和 ui 头文件生成
保存 .ui 后运行,界面还是旧的——不是缓存问题,是构建系统没触发 uic 工具重新生成 ui_mainwindow.h。
排查步骤:
- 检查项目
.pro文件里是否有FORMS += mainwindow.ui(缺了这行,uic根本不跑) - 清理构建目录(Build → Clean Project),再全量构建一次,强制重生成
ui_*.h - 在
mainwindow.cpp中确认是否包含#include "ui_mainwindow.h",且构造函数中调用了ui->setupUi(this) - 如果用了 CMake,要确保
qt_add_resources()或qt_wrap_ui()正确调用(Qt6 推荐用qt_add_executable()自动处理)
最容易被忽略的是:改完 .ui 后只按 Ctrl+R 运行,却不 Build —— Qt Creator 默认“运行前自动构建”,但如果你关掉了这个选项(Projects → Run Settings → “Run configuration” → 勾选 “Run before run”),那就真不会更新 UI。


















