QC查找/添加槽错误。-QtCreator:The class containing “Ui::Pictureshow Button“ could not be found...如何解决?
🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。
🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。
📌 特别说明:
文中问题案例来源于真实生产环境与公开技术社区,并结合多位一线资深工程师与架构师的长期实践经验,经过筛选与系统化整理后输出。文中的解决方案并非唯一“标准答案”,而是兼顾可行性、可复现性与思路启发性的实践参考,供你在实际项目中灵活运用与演进。
欢迎你 关注、收藏并订阅本专栏,与持续更新的技术干货同行,一起让问题变资产,让经验可复制,技术跃迁,稳步向上。
📢 问题描述
问题描述:QC查找/添加槽错误。-QtCreator:The class containing “Ui::Pictureshow Button” could not be found…如何解决?
报错截图如下:

具体报错code如下:
QC查找/添加槽错误.-QtCreator X
The class containing "Ui::Pictureshow Button" could not be found
im
D:
ZZZM PROJECTIQt\MarsonicsDAQ CdemolDemoldaqwidget.cpp.
Pleaseverifythe#include-directives.
OK
全文目录:
📣 请知悉:如下方案不保证一定适配你的问题!
如下是针对上述问题进行专业角度剖析答疑,不喜勿喷,仅供参考:
✅️问题理解
你在 Qt Designer 里对 Pictureshow_Button(这是 对象名 objectName)执行“转到槽/查找添加槽”,Qt Creator 弹出:
The class containing "Ui::Pictureshow_Button" could not be found
Please verify the #include-directives.
(位置:.../daqwidget.cpp)
核心意思:Creator 无法在 daqwidget.cpp 里找到对应的 UI 类定义,也就不知道应该把槽函数加到哪个类中。最常见根因是下面几类(命中率从高到低):
- 没有包含生成的头文件
#include "ui_daqwidget.h"(或包含错地方/文件名不匹配)。 - .ui 的类名 与 你的 C++ 类名不匹配(例如 .ui 中
<class>DaqWidget</class>与你的class DaqWidget不一致,或你是“纯表单”而非“表单类”创建的)。 - 头文件缺少
Q_OBJECT宏,导致 MOC/自动连接不可用,Creator 也难以解析所属类。 - 没有把 .ui 加入构建(qmake:
FORMS += daqwidget.ui;CMake:qt_add_ui/qt_wrap_ui),导致ui_daqwidget.h没有生成或在旧路径。 - 类名大小写/文件名不一致(Windows 上不敏感,Git/CMake/qmake 内部仍可能大小写不一致导致找不到)。
- 你创建的是“Qt Designer Form(纯 .ui)”而非“Qt Designer Form Class(ui+cpp+hdr)”,后来手写类时未按模板写对成员与命名空间。
- 多重包含/命名空间错位/路径多项目 导致 Creator 解析到另一个同名
daqwidget.cpp,从而找不到Ui::<YourClass>。
注意:提示里出现
Ui::Pictureshow_Button其实暴露了线索——Pictureshow_Button是控件的 objectName,不是 UI 类名。Creator 之所以这样显示,是因为它没能解析到正确的Ui::<FormClass>,于是“把控件名错当类名”。所以基本可以锁定是 UI 生成头没被包含 / 类名不匹配。
✅️问题解决方案
下面给你一套一步到位的排查与修复清单(qmake 与 CMake 都给)。按顺序做,通常 5–10 分钟能根治。
1)确认 .ui 与 C++ 类名一致
-
用文本编辑器打开
daqwidget.ui,找到:<class>DaqWidget</class>把这里的类名与你头文件中的类名 逐字符对应(区分大小写):
// daqwidget.h class DaqWidget : public QWidget { Q_OBJECT ... }; -
若不一致(例如 .ui 是
Form、Widget、daqwidget),统一改成你的 C++ 类名,保存。
2)检查头文件(必须含 Q_OBJECT、Ui 前向声明、成员指针)
// daqwidget.h
#pragma once
#include <QWidget>
namespace Ui { class DaqWidget; } // 前向声明,类名要和 .ui 的 <class> 一致
class DaqWidget : public QWidget
{
Q_OBJECT // ★ 必须有
public:
explicit DaqWidget(QWidget *parent = nullptr);
~DaqWidget();
private:
Ui::DaqWidget *ui; // ★ 指向生成的 UI 类
};
3)检查 cpp(必须包含生成的 ui_*.h,构造里 setupUi)
// daqwidget.cpp
#include "daqwidget.h"
#include "ui_daqwidget.h" // ★ 关键:包含生成头,文件名是 ui_ + .ui 文件名
DaqWidget::DaqWidget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::DaqWidget) // ★ 类型名要与 namespace Ui 内一致
{
ui->setupUi(this); // ★ 初始化 UI
}
DaqWidget::~DaqWidget()
{
delete ui;
}
小贴士:
ui_daqwidget.h的名字来自 .ui 文件名。如果你的 ui 文件叫daqWidget.ui,生成的可能叫ui_daqWidget.h,大小写保持一致。
4)确保把 .ui 纳入构建并重新生成(qmake/CMake)
-
qmake(.pro):
QT += widgets FORMS += daqwidget.ui # ★ 必须有 HEADERS += daqwidget.h SOURCES += daqwidget.cpp在 Qt Creator 里执行:工具栏 > 运行 qmake(或“重新配置项目”) → 完整清理并重建。
-
CMake(Qt6 推荐写法):
find_package(Qt6 REQUIRED COMPONENTS Widgets) qt_add_executable(MyApp daqwidget.h daqwidget.cpp daqwidget.ui # ★ 直接列出 .ui main.cpp ) target_link_libraries(MyApp PRIVATE Qt6::Widgets)重新配置(Build > Clean All,然后 Run CMake)再全量构建。
如果你用的是 Qt5 + 旧 CMake,可能使用
qt5_wrap_ui(UI_HDRS daqwidget.ui),并把UI_HDRS加到目标里。
5)清理缓存 & 全量重建
- 关闭 Qt Creator 的 UI 设计器(避免文件被占用)。
- 删除构建目录(如
build-xxx),重新构建。 - 如果你从其它路径拷贝项目,确认 没有同名的旧构建目录 让 Creator 解析错位置。
6)再试“转到槽”的两种可靠方式
-
方式 A:选中按钮,在设计器里右击 → 转到槽;
-
方式 B:直接写自动连接槽(无需“转到槽”对话框):
// 在 DaqWidget 类里添加(自动连接规则:on_<objectName>_<signal>()) private slots: void on_Pictureshow_Button_clicked(); // 假设信号是 clicked() // 实现 void DaqWidget::on_Pictureshow_Button_clicked() { // TODO }只要
Q_OBJECT + ui->setupUi(this)正常,这个函数会被自动连接。
7)如果是“提升的控件”(Promoted Widgets)
若 Pictureshow_Button 是在 Designer 里“提升”的自定义控件,那么还要:
- 在 daqwidget.h 里
#include你的自定义控件头; - 在 .ui 的 Promoted Widgets 面板里,确保 Header 指向正确路径;
- 重新构建后再试“转到槽”。
✅️问题延伸
-
为什么 Creator 会提示
Ui::Pictureshow_Button?
Creator 通过解析#include "ui_*.h"找到namespace Ui { class <FormClass>; },再去检索<FormClass>内部的控件。如果没解析到这一步,就只能拿到控件的 objectName,误以为要找 “Ui::<objectName>”,从而报“找不到类”。 -
自动连接与命名规则
Qt 的 自动连接机制按on_<objectName>_<signal>()签名匹配,无需手工连接。确保:Q_OBJECT存在;- 构造函数中调用了
ui->setupUi(this); - 函数签名与信号完全一致(参数个数、const & 等)。
-
多模块/子目录工程
如果 UI 类在子库里生成,应用侧的 .cpp 没有包含正确的ui_*.h,Creator 也会迷路。把“转到槽”的实现放在 拥有该 .ui 的类对应的 .cpp 中。 -
大小写、路径、编码问题
在跨平台或多人协作中,.ui大小写微差就会导致生成头名不一致,Windows 下编译也许过了,但 Creator 的索引器找不到;统一大小写可避免隐患。
✅️问题预测
- 继续在“纯 .ui + 手写类”混用时,类名/大小写再度不一致会复现同类问题。
- 如果迁移到 CMake/Qt6 而仍用旧的
qt5_wrap_ui,可能出现 ui 头不生成/路径不对 的问题。 - 团队协作中,Promoted Widgets 的 Header 相对路径在不同机器上不一致,Creator 会再次报“找不到类”。
✅️小结
- 报错的根因是 Creator 找不到
Ui::<FormClass>——通常因为 没包含ui_*.h或 .ui 的<class>与 C++ 类名不匹配。 - 头文件需要:
Q_OBJECT、namespace Ui { class <FormClass>; }与Ui::<FormClass>* ui;。 - 源文件需要:
#include "ui_<formfile>.h"和ui->setupUi(this);。 - 构建系统要包含 .ui(qmake:
FORMS +=;CMake:qt_add_ui/列出 .ui)。重新配置+全量重建。 - 直接写
on_Pictureshow_Button_clicked()亦可,不依赖“转到槽”对话框。 - 若是提升控件,记得在 .h 和 .ui 的 Promoted 里都配置好头文件路径。
- 完成以上步骤后,“转到槽”即可正常定位并生成槽函数。
🌹 结语 & 互动说明
希望以上分析与解决思路,能为你当前的问题提供一些有效线索或直接可用的操作路径。
若你按文中步骤执行后仍未解决:
- 不必焦虑或抱怨,这很常见——复杂问题往往由多重因素叠加引起;
- 欢迎你将最新报错信息、关键代码片段、环境说明等补充到评论区;
- 我会在力所能及的范围内,结合大家的反馈一起帮你继续定位 👀
💡 如果你有更优或更通用的解法:
- 非常欢迎在评论区分享你的实践经验或改进方案;
- 你的这份补充,可能正好帮到更多正在被类似问题困扰的同学;
- 正所谓「赠人玫瑰,手有余香」,也算是为技术社区持续注入正向循环
🧧 文末福利:技术成长加速包 🧧
文中部分问题来自本人项目实践,部分来自读者反馈与公开社区案例,也有少量经由全网社区与智能问答平台整理而来。
若你尝试后仍没完全解决问题,还请多一点理解、少一点苛责——技术问题本就复杂多变,没有任何人能给出对所有场景都 100% 套用的方案。
如果你已经找到更适合自己项目现场的做法,非常建议你沉淀成文档或教程,这不仅是对他人的帮助,更是对自己认知的再升级。
如果你还在持续查 Bug、找方案,可以顺便逛逛我专门整理的 Bug 专栏:《全栈 Bug 调优(实战版)》。
这里收录的都是在真实场景中踩过的坑,希望能帮你少走弯路,节省更多宝贵时间。
✍️ 如果这篇文章对你有一点点帮助:
- 欢迎给 bug菌 来个一键三连:关注 + 点赞 + 收藏
- 你的支持,是我持续输出高质量实战内容的最大动力。
同时也欢迎关注我的硬核公众号 「猿圈奇妙屋」:
获取第一时间更新的技术干货、BAT 等互联网公司最新面试真题、4000G+ 技术 PDF 电子书、简历 / PPT 模板、技术文章 Markdown 模板等资料,统统免费领取。
你能想到的绝大部分学习资料,我都尽量帮你准备齐全,剩下的只需要你愿意迈出那一步来拿。
🫵 Who am I?
我是 bug菌:
- 活跃于 CSDN | 掘金 | InfoQ | 51CTO | 华为云 | 阿里云 | 腾讯云 等技术社区;
- CSDN 博客之星 Top30、华为云多年度十佳博主、掘金多年度人气作者 Top40;
- 掘金、InfoQ、51CTO 等平台签约及优质作者;
- 全网粉丝累计 30w+。
更多高质量技术内容及成长资料,可查看这个合集入口 👉 点击查看
硬核技术公众号 「猿圈奇妙屋」 期待你的加入,一起进阶、一起打怪升级。
- End -
更多推荐


所有评论(0)