选 Qt Widgets Application:适合有图形界面需求的桌面应用,自动生成.ui/.h/.cpp文件,支持Qt Designer和信号槽机制;Qt Console Application仅含main.cpp,无UI设计能力,适用于无界面的后台逻辑或环境验证。

选 Qt Widgets Application 还是 Qt Console Application?
取决于你要跑在哪儿、有没有界面需求。有窗口、按钮、菜单,就选 Qt Widgets Application;只打印日志、做数据处理、跑后台逻辑,用 Qt Console Application 更轻量。
新手常踩的坑是:误选 Qt Console Application 却想拖按钮——它压根不生成 .ui 文件,也没有 QMainWindow 或 QWidget 的 UI 设计入口,连 Qt Designer 都打不开。
-
Qt Widgets Application自动生成mainwindow.ui、mainwindow.h、mainwindow.cpp,适合学信号槽和界面交互 -
Qt Console Application只有main.cpp,依赖QCoreApplication,不能调show(),也不能用QPushButton - 如果只是验证 Qt 环境是否装好,
qDebug() 足够;但想点按钮弹窗,必须选 Widgets
main.cpp 里 QApplication 和 QCoreApplication 别混用
这是编译失败最常见原因之一。Widgets 程序必须用 QApplication,控制台程序只能用 QCoreApplication,二者不可互换。
现象:error: 'class QCoreApplication' has no member named 'exec' 或 undefined reference to `QApplication::QApplication(int&, char**),基本就是类型写错了。
组合式C++代码评审方案,融合静态分析、AI推理、多轮迭代评审和C++专项检查,适用于PR审查、增量代码审查、全项目评审和代码质量评分,触发词包括review cpp、cpp代码评审、C++review、代码审查。
- Widgets 项目:头文件含
#include <qapplication></qapplication>,主函数中实例化QApplication a(argc, argv); - Console 项目:头文件含
#include <qcoreapplication></qcoreapplication>,主函数中实例化QCoreApplication a(argc, argv); - 别图省事删掉
a.exec()——控制台程序可以省略,但 Widgets 程序没它,窗口一闪就退出
按钮点击事件连不上?检查 connect 语法和对象生命周期
拖了个 QPushButton,写了槽函数,但点按钮没反应——大概率是 connect 写错,或 UI 对象还没初始化完就去连。
典型错误:connect(pushButton, &QPushButton::clicked, this, &MainWindow::on_click); 中的 pushButton 是空指针,因为没通过 ui-> 访问。
- 必须用
ui->pushButton(名称以你在.ui里设的 objectName 为准) - 连接语句必须写在
ui->setupUi(this);之后,否则ui成员未初始化 - 槽函数声明要加
private slots:,且头文件里不能漏掉Q_OBJECT宏(moc 机制依赖它) - Qt6 之后推荐用函数指针写法:
connect(ui->pushButton, &QPushButton::clicked, this, &MainWindow::on_click);,比字符串写法安全
.pro 文件里 widgets 模块漏了会编译报错
新建项目时若手动改过 .pro 文件,或者从旧项目复制过来,容易漏掉 widgets 模块,导致 QMainWindow、QPushButton 等找不到定义。
错误信息类似:error: 'QMainWindow' was not declared in this scope,或 ui_MainWindow.h: No such file or directory。
- 确保
.pro文件中有QT += core gui widgets(Qt5)或QT += core gui widgets(Qt6 默认仍需 widgets) - Qt6 开始
gui模块拆得更细,widgets不再自动包含gui,必须显式写全 - 改完
.pro文件后,务必右键项目 → “Run qmake”,否则改动不生效

















