Qt Console Application是唯一能直接生成纯命令行Qt项目的模板,必须选择它而非Widgets或Quick模板;需确保.pro含CONFIG += console、套件为桌面版、取消“Run in terminal”以稳定查看输出。

Qt Console Application 是唯一能直接生成纯命令行 Qt 项目的模板,但它的默认行为和输出方式容易让人误以为“没运行成功”。
选错模板会导致项目根本跑不起来
很多人点进“Application”后随手选了 Qt Widgets Application 或 Qt Quick Application,结果编译通过却弹出空白窗口或直接退出——因为这两类项目默认依赖 GUI 模块,而控制台程序不需要、也不该链接 QtGui 或 QtQuick。
- 必须在新建项目时选择
Qt Console Application(不是“Empty qmake Project”或“Non-Qt Project”) - 如果已建错,删掉整个目录重来最省时间;改
.pro文件强行剥离 GUI 依赖容易引发链接错误 -
QCoreApplication是控制台项目的基类,它不启动事件循环的 GUI 分支,只处理QTimer、QThread、QTcpSocket这类非界面任务
main.cpp 里不能写 qDebug()
默认生成的 main.cpp 只有 QCoreApplication app(argc, argv); 和 return app.exec();,但 app.exec() 是阻塞等待事件的——控制台程序通常执行完逻辑就退出,不需要长期运行事件循环。
- 简单脚本:把业务逻辑写在
app.exec()前面,最后用return 0;显式退出 - 需要异步能力(比如发 HTTP 请求、监听 TCP 端口):保留
app.exec(),但得确保有对象保持事件循环活跃(例如new QTimer并start(),或new QTcpServer) -
qDebug()输出默认走 stderr,在 Qt Creator 的“应用程序输出”窗格可见;若勾选了Run in terminal,则输出会跳到系统终端,此时qDebug()和std::cout都能打印
构建套件选错,编译直接报“undefined reference to WinMain”
这个错误只出现在 Windows 下,本质是链接器把项目当成了 GUI 子系统程序,却找不到 WinMain 入口。根本原因是构建套件里选了带 Desktop Qt x.x.x MinGW x64 但没注意后缀——有些套件标着 Desktop 实际仍按 GUI 模式配置。
- 打开
Projects > Build & Run > Build > Kit,确认所选套件的 “Compiler” 是 MinGW 或 MSVC,“Qt version” 是桌面版(非 Android/iOS),且 “Device type” 是 Desktop - 检查
.pro文件里是否有CONFIG += console—— 这行必须存在,否则 qmake 不会告诉链接器这是控制台子系统 - 如果用了 CMakeLists.txt 而非 qmake,需确保
project(MyApp CXX)后加set(CMAKE_CXX_STANDARD 17)且add_executable不带WIN32标志
输出看不到?先关掉“Run in terminal”再查
Qt Creator 默认把控制台程序输出重定向到内部“应用程序输出”面板,但勾选 Run in terminal 后,程序会另起一个黑窗口——而这个窗口在执行完立刻关闭,导致你只看到一闪而过的文字。
- 临时调试:取消勾选
Projects > Run > Run in terminal,输出就稳稳显示在下方面板 - 真要弹终端:在
main()结尾加system("pause");(Windows)或system("read -p 'Press enter to continue...'");(Linux/macOS) - 更健壮的做法是用
QEventLoop阻塞,等用户按回车再退出,避免依赖 shell 命令
.pro 配置、构建套件三者是否严格匹配上。漏掉任意一环,都会让“Hello World”变成“Hello What?”。


















