ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

用Qt Creator学C语言:环境配置、项目创建与调试实战指南

用Qt Creator学C语言:环境配置、项目创建与调试实战指南 1. 为什么用Qt5来学C语言一个不太常见但很实用的组合1.1 Qt Creator不是Qt框架名字相似但两码事很多大一新生看到“Qt5”三个字母第一反应是这不是C写图形界面的东西吗我学C语言为什么要用它我最初也有这个疑问后来陪一个学弟配置环境时才彻底想明白——我们说的“用Qt5学C语言”准确讲是把Qt5自带的Qt Creator开发环境拿来写C语言程序。Qt5是一个C应用开发框架而Qt Creator是一个IDE集成开发环境。IDE就像是厨房框架就像是菜谱你完全可以把厨房里的锅碗瓢盆拿来煮一碗速冻水饺不一定非要照着菜谱做满汉全席。Qt Creator本身提供了项目模板、代码编辑器、编译器和调试器的图形化管理界面而它默认支持的“Plain C Project”就是专门用来写纯C语言项目的模板跟C、跟Qt库没有任何强制绑定关系。我见过不少新手在Visual Studio和CodeBlocks之间纠结还有人开学第一周就把时间全耗在VSCode的launch.json配置上。如果你只想安安静静把手上的C语言课后题跑起来Qt Creator是一个被严重低估的选择。它界面比CodeBlocks现代安装比VS轻量再说夸张一点你以后学到C和Qt图形界面时这套环境还能继续用不用推倒重来。1.2 各路IDE横向对比Qt Creator到底赢在哪我用过的C语言开发环境不算少从大学时代的Dev-C到工作后常用的VSCode、CLion再到Linux服务器上的纯命令行gcc都有涉足。把这几个常见选择放到一起对比你看完就知道为什么我给新手推荐Qt Creator了。开发环境上手难度调试器图形化跨平台环境配置时长后续延伸性Dev-C低弱仅Windows极短低编辑器太老CodeBlocks中中较好中等中但界面偏旧Visual Studio中偏高非常强仅Windows较友好较长安装包大高适合Windows开发VSCode GCC高中极好长JSON配置劝退新手高但需要自己维护配置Qt Creator中低强极好短一键安装极高直接衔接C/QtDev-C是我读书时最常用的轻量到不行但它的编译器版本实在是太老了C11标准支持都费劲。VSCode是很强但让一个大一新生去理解tasks.json、launch.json、c_cpp_properties.json之间的关系属实有些残酷。Visual Studio功能强大然而第一次安装动辄几个GB还要等半天很多人还没开始写代码就先被安装流程劝退了。Qt Creator恰好站在一个平衡点上安装是图形化向导项目创建有现成模板编译和运行可以一键完成调试时鼠标点一下行号就能下断点。更关键的是它不会在你还没学会走路时就逼你理解构建系统的底层细节。等你以后需要交叉编译或者手动配CMake时再回去补这些知识也完全来得及。1.3 这套方案到底适合哪些人先说结论不是所有人都必须用Qt Creator学C语言但如果你是以下几类人这套方案会特别合适。第一类是从零开始学C语言的大学新生。教程里让你写的都是控制台程序代码短小不需要花里胡哨的工程管理。Qt Creator新建一个Plain C Project后左下角点一下绿色三角代码就跑起来了省心。第二类是以后打算往嵌入式或Linux方向走的同学。嵌入式开发中C语言是绝对主力很多开发板厂商提供的SDK都基于Qt工具链或者至少风格相近。提前熟悉Qt Creator的界面和调试习惯可以为后面学习交叉编译、在ARM板子上开发图形界面做铺垫。网络热词里的“orangepi cm5安装qt5 交叉编译”就是这类方向的典型问题。第三类是想让调试器帮自己理解指针的人。指针和内存是C语言新手最容易卡住的地方而Qt Creator的调试器可以直观地查看变量的内存地址和数值变化这比在纸上画逻辑框图要直观太多。我后面会专门展示这种用法。如果你是重度Linux用户并且已经习惯了VSCode加命令行的工作流那完全没必要换。工具是为人服务的哪套用得顺手就用哪套不要为了“统一”而统一。2. 环境准备装好Qt5只需要注意这三件事2.1 下载安装Qt5时组件怎么选安装Qt5前先想清楚一个原则我们只需要Qt Creator这个IDE加上一个能编译C语言的编译器至于Qt框架本身要不要装对你当前阶段没有影响。但为了顺手建议直接下载Qt官方的在线安装器一路安装最常用的组件即可。去Qt官网下载页面选“Online Installer for Windows”运行后会要求登录Qt账号注册一下就好免费开源版本没限制。安装过程中关键是第二步“Select Components”我建议这样选在“Qt”分类下找“Qt 5.15.2”展开后勾选“MinGW 11.2.0 64-bit”或者“MinGW 8.1.0 64-bit”二选一即可。在“Developer and Designer Tools”分类下确认勾选“Qt Creator”如果你下载的是带Creator的发行包这一步可能默认就是勾好的。如果磁盘空间紧张“Qt”分类里其他模块比如Qt Charts、Qt Data Visualization都可以不勾纯C语言阶段一个都用不上。这里有个容易迷惑的地方Qt 5.15.2里的MinGW和MSVC。MinGW是一套开源的Windows编译器工具链自带gcc安装比较简单对纯C语言学习完全够用。MSVC则是微软的Visual C编译器需要额外装Visual Studio Build Tools对你来说没必要。所以记住一句话Windows上学习阶段认准MinGW就对了。2.2 确认编译套件能正常识别安装完成之后先别急着新建项目花一分钟检查编译套件有没有被Qt Creator正确识别。打开Qt Creator依次进入“工具”-“选项”-“Kits构建套件”。在右侧的“编译器”一栏里你会看到类似“GCC”或“MinGW”的选项对应的版本号和路径如果都显示正常说明编译器已经注册成功。然后切到“Kits”标签页找一找是否有类似“Desktop Qt 5.15.2 MinGW 64-bit”的条目后面的状态列如果是绿色勾说明一切就绪。如果看到黄色感叹号一般问题出在编译器路径没找到。Win键搜索“Qt”打开Qt目录下自带的命令提示符输入gcc --version看能不能打印版本信息。如果能打印把gcc所在目录一般是Qt\Tools\mingw1120_64\bin手动填进Qt Creator的编译器路径里。提示安装路径千万别带中文也尽量避免空格。比如D:\Qt\Qt5.15.2比C:\Program Files\Qt\Qt5.15.2更省心。虽然新版工具链对空格支持已经不错了但没必要给自己挖坑。2.3 Windows用户名为中文带来的隐藏麻烦这个坑比较隐蔽但遇到的人真不少。如果你的Windows登录用户名是中文比如“张三”那么默认的项目路径会出现在C:\Users\张三\...下面。部分老版本的MinGW对非ASCII路径处理不好编译时会报出各种莫名其妙的错误比如找不到头文件、找不到标准库。解决办法有三种新建一个英文名称的Windows用户切换过去写代码最麻烦但最彻底。把项目路径从用户目录改出来比如放到D:\Projects\HelloWorld绕过中文路径。这个方法最实用。在Windows设置里把用户文件夹重命名成英文但操作有风险新手不建议尝试。我个人建议第二种反正项目文件放在哪个盘都不影响编译。养成把代码和用户目录解耦的习惯以后换电脑、做版本管理都方便很多。3. 三步创建纯C语言项目从新建到Hello World3.1 新建项目时选择Plain C Project打开Qt Creator点击左上角“文件”-“新建文件或项目”弹出对话框后注意看左侧分类。我们要找的不是“Application”下的Qt Widgets Application而是**“Non-Qt Project”分类下的“Plain C Project”**中文版里通常叫“纯C项目”或“非Qt项目”。如果你用的Qt Creator版本和我的不一样找不到Plain C Project也别慌。可以用“CMake Project”模板然后在生成的CMakeLists.txt里强制指定语言为C我来给你一份现成的内容cmake_minimum_required(VERSION 3.5) project(HelloWorld LANGUAGES C) add_executable(hello_world main.c)这段配置的含义是声明项目名称为HelloWorld只启用C语言把main.c编译成名为hello_world的可执行文件。相比之下Plain C Project默认使用qmake构建Qt Creator会自动生成.pro文件你基本不需要手动改任何东西所以我优先推荐它。填写项目名称时注意项目名称最好跟功能相关比如hello_world不要乱起。接下来会弹出选择构建套件的页面确保“Desktop Qt 5.15.2 MinGW 64-bit”前面的框被勾选然后一路“下一步”完成创建。3.2 认识生成的main.c和.pro文件项目创建完成后看左侧文件树里面有三个关键元素HelloWorld.pro、main.c、还有Headers文件夹可能为空。双击打开main.cQt Creator已经帮你写好了一小段默认代码。如果你用的是新版它大概是这样的#include stdio.h int main(void) { printf(Hello World!\n); return 0; }如果是纯空白文件或者模板只给了#include stdio.h那也没关系你手动把上面的完整代码敲进去即可。这里有一个容易被忽视的细节确保main.c的后缀名是.c而不是.cpp。如果后缀是.cpp编译器会按C语法处理虽然这段代码也能跑但后续你一旦写了C语言特有的语法比如malloc强制转换、复合字面量等就会遇到意想不到的编译错误。再顺手看一眼.pro文件内容也很简单TEMPLATE app CONFIG console CONFIG - app_bundle TARGET HelloWorld SOURCES main.c逐行翻译一下TEMPLATE app告诉qmake我们要生成一个应用程序CONFIG console表示这是一个控制台程序“SOURCES main.c”把源文件加入工程。不要被这些配置文件吓到现阶段你只需要知道它们的存在就是为了让你不用记一堆gcc命令。等以后学了Makefile你再回头理解它们会特别轻松。3.3 编译、运行、调试第一次看到“Hello World”写完之后点击左下角绿色三角按钮或者按快捷键Ctrl RQt Creator会先编译再运行。编译阶段下方的“编译输出”面板会滚动一些信息大意是“gcc正在编译main.c生成hello_world.exe”。如果有红色错误信息说明代码有语法问题双击错误行会直接跳到出错位置。运行阶段屏幕上应该弹出一个黑色命令行窗口里面打印出Hello World!看到这几个单词的时候你的C语言环境就算是彻底跑通了。如果窗口一闪而过别急这是第5章要讲的经典坑之一下面会专门处理。调试模式的做法是在代码左侧灰色区域点一下比如在printf那一行设置断点然后按F5启动调试程序会在断点处停下来。“调试模式”下“局部变量”窗口会显示当前函数内所有变量的值虽然Hello World里没有变量但这个功能在你学for循环和指针时会成为最强助手。按F10单步执行可以逐行走完整个程序这对理解程序执行流程有极大帮助。4. 核心代码逐行拆解不止是打印一句话4.1 头文件、主函数、返回值到底怎么回事很多大一新生背下了Hello World的代码却不知道每行在干什么我建议你从现在开始养成“拼图意识”把每块代码拼进C语言的整体结构中。第一行#include stdio.h是预处理指令。它的意思“把标准输入输出头文件包含进来”。stdio是standard input output的缩写里面声明了printf、scanf这些函数。你可以把头文件理解成工具清单你告诉编译器“我要用标准工具箱”编译器才会允许你调用printf。如果你哪天删掉这行代码编译时会直接报错“printf隐式声明”因为编译器不知道该函数长什么样。第二行int main(void)定义了主函数。C程序永远从main函数开始执行相当于程序的“入口大门”。int表示这个函数最终会返回一个整数值void表示它不接受任何参数写成int main()也不算错但很多现代编译器会建议写成int main(void)来准确表达“不接受参数的意思”。我的建议是养成写int main(void)的习惯严谨一点总没错。最后return 0;会把0返回给操作系统。在习惯约定里0表示程序正常结束非零值表示异常结束。你可以试试把返回值改成return 1;再运行程序也能跑但如果你在命令行或脚本里检查退出码会看到非零状态。理解这个用意以后你学“进程”相关概念时会豁然开朗。4.2 printf到底能输出什么printf是C语言里使用频率最高的函数之一它的本名是“print formatted”带格式地打印。你现在只需记住第一个参数里的普通字符会原样输出而%开头的占位符会被后面给出的值替换。#include stdio.h int main(void) { int age 18; double height 1.75; char grade A; printf(我今年%d岁身高%.2f米评级%c。\n, age, height, grade); return 0; }这里%d对应整数%.2f对应浮点数并保留两位小数%c对应单个字符。还有%s用来输出字符串。新手常犯的错误是类型不匹配比如用%d去输出浮点数打印结果会是一个莫名其妙的数字。遇到这种情况不要慌先检查占位符和参数类型是否一一对应。另外要注意\n在C语言里是换行符它和我们直接在键盘上按回车不是一回事。编译器看到反斜杠n会在输出里插入一次换行。所谓“转义字符”就是把普通字符转换成了特殊含义类似的还有\t代表Tab缩进\\代表一个反斜杠这些在“C语言运算符和表达式”那类教程里会有专门表格。你可以做个小实验把\n去掉再连续调用两次printf会看到两句话接在同一行——这个现象本身就解释了换行的作用。4.3 为什么这里没有用Qt的类库有同学会问既然安装了Qt5为什么代码里没有出现#include QString或QDebug这类内容因为Plain C Project压根不会链接Qt库咱们用的是纯C语法。Qt的核心类库是C层面的东西如果你尝试在.c文件里写QString s hi;编译器会直接报错因为C语言不认识QString这个类型。我的建议是学习初期千万不要把C语言和Qt/C混在一起学。先把printf、指针、结构体、动态内存这些C语言的核心概念吃透等进入C阶段再接触QString、QWidget、信号槽这些抽象层级更高的东西。否则你很容易陷入“热词”里提到的“qt5 signal slot传递结构体”、“qstring file not find”此类问题中这些都是在C与Qt的框架约束下讨论的对C语言入门者完全是超纲内容。5. 新手最容易踩的6个坑现场实战排查记录5.1 中文乱码控制台输出的中文变成“锟斤拷”这是Windows环境下最经典的问题。源文件用UTF-8编码保存而Windows控制台默认用GBK代码页936解码两套编码不匹配打印出的中文自然变成乱码。最省心的办法初学阶段所有字符串都用英文输出。等以后理解了字符编码的概念再解决中文问题也不迟。如果非要在Window下用中文显示几个可选的临时方案在printf之前调用setlocale(LC_ALL, .936);并包含locale.h头文件让程序内字符编码与控制台一致。运行前在命令行窗口执行chcp 65001切换到UTF-8代码页但窗口会重新初始化实用性一般。在Qt Creator的“工具”-“选项”-“文本编辑器”-“行为”里把默认编码设为“UTF-8”或“GBK”然后保持.c文件编码与控制台一致。我不建议在这一关耗费太多精力因为字符编码是一个独立的、挺有深度的主题等C语言基础打牢后再来研究你会理解得更通透。5.2 运行窗口一闪而过Hello World看不清Windows控制台程序运行结束后系统会立刻关闭窗口导致你根本来不及看输出结果。这是新手最早遇到的“灵异事件”之一。解决办法很简单在return 0;之前加入一行getchar();。#include stdio.h int main(void) { printf(Hello World!\n); getchar(); return 0; }getchar会等待你从键盘输入一个字符程序就会停在getchar这一行窗口保持打开按一下回车才会正式退出。有人会用system(pause);这个在Windows上效果一样但它要调用外部命令不同平台表现不一致移植性差我建议直接用getchar()。5.3 Qt Creator不能拖拽文件到项目树里你在资源管理器里把一个main.c拖到Qt Creator的项目管理器上会发现鼠标变成禁止符号拖不进去。这不是软件坏了而是Qt Creator默认不允许通过拖拽添加文件到工程中这是很多新手最先遇到“qt5无法拖拽文件”问题所在。正确操作是在项目树上右键点击项目名称选择“添加现有文件...”然后在文件对话框里找到你的.c文件。或者你把文件复制到项目目录下再右键项目名称选择“重新扫描”文件就会出现。记住这个操作逻辑后不管是添加.h头文件还是图片资源你都不会再被卡住了。5.4 编译报错“cannot find -lGL”或者“gcc不存在”这个问题在Linux系统下特别常见。Qt Creator默认帮你生成Makefile但你的系统里可能还没装基本的编译环境。Ubuntu/Debian系的机器在终端执行sudo apt update sudo apt install build-essentialbuild-essential这个包会一次性装上gcc、g、make等核心工具。如果编译时提示找不到GL库cannot find -lGL再装一个sudo apt install libgl1-mesa-devWindows下如果Qt Creator自带MinGW理论上不会出现“gcc不存在”的问题。如果编译面板提示“程序gcc不存在”多半是构建套件里的编译器路径没配对回到第2.2节重新检查一遍就好。5.5 代码补全和语法高亮异常这种情况很多是因为文件后缀名不是.c而是.cpp或者你新建项目时选成了“C Project”。Qt Creator会按文件后缀决定语法解析方式后缀是.cpp时你写printf通常也能用但某些纯C的写法就会报错。检查方法很简单看文件树上文件图标是不是带有“C”标志或者直接看右下角语言模式。如果是C模式把文件改成.c后缀重新添加进项目。5.6 新建项目时找不到Kit或者Kit带感叹号这个问题本质上还是编译器没配对。注意Qt Creator里“Kit构建套件”是把编译器、调试器、Qt版本等打包在一起的组合。如果Kit显示感叹号点开详情看缺了哪个环节。最省事的修复方式如果你实在搞不定自动检测可以在“编译器”选项卡里“手动添加”-“MinGW”手动选择gcc.exe和g.exe所在目录。对学习C语言而言只要能找到gcc.exe调试器让Qt Creator默认配置就行。6. 学完Hello World之后还能做什么6.1 用Qt Creator持续练习C语言核心知识点环境彻底搭好之后你的“练功房”就有了。接下来每学一个概念都可以直接建一个新项目或新增一个.c文件去验证我建议按这个顺序往下推进变量和数据类型写一个程序分别输出int、double、char、long long的字节大小用sizeof运算符验证对比Windows 64位和32位平台下的差异。顺便说一句热词里的“c语言long long数组”其实就是long long arr[10];这种声明和普通数组没什么本质区别只是元素类型是64位整数。分支和循环计算1到100之和判断一个数是否为素数用while和do-while各写一遍体会二者至少执行一次的区别。这个区别就是热词“c语言while和do-while区别”的核心答案。指针和函数写一个交换两个整数的函数传值和传址各写一版用调试器观察调用前后的变量值变化。理解“值传递”后你就明白为什么很多人说C语言难在指针——因为指针让你第一次能间接修改内存。字符串和指针运算自己实现strlen和strcpy然后想一想strstr函数能不能查找二进制数据。答案是不能因为strstr按字符串方式查找遇到\0就停止而二进制数据里可能包含大量0x00要用memmem或自定义循环配合memcmp来查找。这类思考对理解字符串和内存的关系特别有帮助。结构体和链表做一个简单的学生通讯录用结构体保存姓名、学号、成绩再手写一个单向链表的插入、删除、遍历。这一步能让你对“动态内存管理”有直观认识。文件操作用fopen、fprintf、fscanf把一批数据写入文件再读出来配合Excel打开你会真正感受到程序和数据的关系。“c语言文件读写操作代码”“虚拟存储器管理c语言”这类热词等你学到这个阶段都自然会碰到。以上每个练习都可以在Qt Creator里下断点一行一行看变量的变化。这是纯命令行方式很难达到的体验。6.2 从纯C过渡到Qt/C需要知道的几个转变当C语言基础打牢后你再进入Qt/C世界会舒服很多。但有些转变必须提前知道C语言用char*表示字符串C里字符串首选QString或std::stringC语言通过结构体和函数指针模拟面向对象C直接有class和继承Qt里的信号槽是实现对象间通信的核心机制如果你想在信号槽里传递自定义结构体不能直接传得事先用qRegisterMetaType注册这个类型否则运行时会有警告。这不是你现在需要掌握的细节但先有个概念以后踩坑时至少知道关键词去哪儿查。嵌入式方向也是一条延伸路径。比如热词里“orangepi cm5安装qt5 交叉编译”这类需求本质是在PC上安装ARM架构的GCC工具链让Qt Creator生成能在开发板上运行的程序。它跟你在本机写Hello World的过程类似区别在于编译器换成了交叉编译器部署路径从“本机运行”变成“拷到板子上运行”。如果你对硬件感兴趣可以在学完文件操作和进程基础之后再研究。6.3 推荐的学习路线和练习资源环境只是敲门砖真正拉开差距的是练习量。我个人很推荐跟着翁恺老师的C语言课程走一遍他是很多人的C语言启蒙老师讲课风趣例题也贴近初学者。书方面《C Primer Plus》和《C程序设计语言》KR都是经典前者细碎全面后者简洁精辟建议两本配合着看。刷题平台可以选择PTA、力扣等用“字符串逆序C语言”这类基础题练手就够了。如果你能把热词列表里的“快速排序c语言”“冒泡排序c语言”“最优二叉搜索树c语言”每个算法都用C语言实现一遍再配合调试器走查代码你的C语言水平在同届里已经算优秀了。实际工作中我发现很多“会写代码”的人排序算法能当场白板写出bug-free版本的仍然屈指可数所以别小看这些基础题。最后再分享一个我自己摸索出来的小窍门在Qt Creator里把字体设置为Consolas或“等距更纱黑体”字号14并开启“显示行号”。代码编辑器的调校看起来是小事但它能明显降低长时间阅读代码的疲劳感。等你写几百行代码之后就会发现“舒适的文字排版”对解题效率的影响比想象中大得多。我从大学一路走过来见过太多人把时间耗在环境配置和编辑器选型上到头来一句Hello World都没跑通。工具永远是为了让你更快到达目的地别让工具本身成为终点。希望这篇文章能帮你把环境这座小山翻过去然后把精力真正花在理解C语言、理解计算机运行原理这件事上。加油。
返回列表