《Qt Creator:人工智能时代的跨平台开发利器》
- 一、Qt Creator 简介
- (一)功能和优势
- (二)快捷键与效率提升
- (三)跨平台支持
- (四)工具介绍与使用
- 主要特性:
- 使用步骤:
- (五)编程软件选择
- (六)编码与跨平台应用开发
- (七)Qt 入门与快速搭建跨平台桌面应用
- Qt 概述:
- 安装与配置:
- Qt Widgets 快速上手:
- Qt 信号与槽机制:
- Qt 资源管理:
- Qt 项目部署与跨平台测试:
- 二、Qt Creator 支持人工智能的功能
- 三、Qt Creator 与其他支持人工智能的 IDE 比较
- 1、Qt Creator 与 QDevelop 的对比:
- 2、Qt Creator 与 Eclipse 的对比:
- 3、Qt Creator 与 KDevelop 的对比:
- 4、Qt Creator 与 Monkey Studio 的对比:
- 5、Qt Creator 与 Code::Blocks 的对比:
- 6、Qt Creator 与 Visual Studio 的对比:
- 7、Qt Creator 与 Visual Studio Code的对比:
- 四、Qt Creator 作为跨平台 IDE 的优势
- 2. 集成开发环境
- 3. 强大的代码分析工具
- 4. 灵活的构建系统
- 5. 社区支持
- 五、如何在 Qt Creator 中利用人工智能技术
- 1. 使用 GitHub Copilot
- 2. 五子棋 AI 实现案例
- 六、Qt Creator 在人工智能开发中的应用案例
- 1. 五子棋 AI 案例
- 2. 基于 ROS 与 QT 的开源项目
一、Qt Creator 简介
Qt Creator 是一款功能强大的跨平台集成开发环境(IDE),由 Qt Company 开发和维护。它旨在为开发者提供高效、便捷的开发体验,支持多种编程语言和平台,适用于桌面、移动端和嵌入式系统的应用开发。
Qt Creator 的设计目标是使开发人员能够利用 Qt 这个应用程序框架更加快速及轻易地完成开发任务。它集成了丰富的工具和功能,包括项目生成向导、高级的 C++ 代码编辑器、浏览文件及类的工具、集成了 Qt Designer、Qt Assistant、Qt Linguist、图形化的 GDB 调试前端,集成 qmake 构建工具等。
Qt Creator 支持构建和运行桌面环境(Windows、Linux、FreeBSD 和 macOS)、移动设备(Android、BlackBerry、iOS、Maemo 和 MeeGo)和嵌入式 Linux 设备的 Qt 应用程序。构建设置允许用户在不同的 Qt 版本和构建配置之间切换。对于移动设备目标,Qt Creator 可以生成安装包,将其安装到连接到开发计算机的移动设备上,并在那里运行。
(一)功能和优势
快速入门和提高效率:Qt Creator 主要是为了帮助新 Qt 用户更快速入门并运行项目,还可提高有经验的 Qt 开发人员的工作效率。
强大的代码编辑器:具有语法标识、代码完成、静态代码检验、提示样式上下文相关的帮助、代码折叠、括号匹配和括号选择模式、高级编辑功能等。可以整排出规范代码,自动补全,指示行间错误及警告,从语义上对类、函数及变量作分析,方便的跳转浏览,对类、函数及变量做上下文分析,提供编码辅助。可以对变量智能化重命名,告知函数声明和调用的位置。
可视化编辑器:提供两个集成的可视化编辑器,Qt Designer 与 Qt Quick Designer。Qt Designer 用于设计和建构制图形用户界面(GUI),使用 Qt widgets 设计和构建制图形用户界面(GUI)。Qt Quick Designer 则提供了一个用户界面,用于在设计模式下创建和编辑基于 QML 的图形用户界面。
版本发布与改进:
2011 年 10 月 21 日,Qt Creator 2.4.0 beta 发布。最诱人的功能 / 改进无疑是新增的 “同步声明及定义” 功能。使用该功能,当要改变某个方法的声明或定义时,Qt Creator 会自动在代码及头中帮助你进行同步。此外,“从声明中插入定义” 也进行了改进,现在该功能会最少化代码中的命名(names),例如,丢弃不必要的命名空间,从代码中发现更多的适合命名。
2011 年 12 月 14 日,Qt Creator 2.4 发布。新的 “synchronize declaration and definition(同步声明及定义)” 和 “create definition from declaration(从声明中插入定义)” 功能。在 Creator 2.4 中,当你需要改变一个声明或定义,会发现一个小的 “灯泡” 图标出现。按 “Alt+Return” 键(或单击 bulb 图标),相应的其他位置也会同时改变。
2012 年 03 月 16 日,Qt Creator 2.5 测试版发布,带来了对最新的 C++ 11 标准的更多支持,例如:nullptr、constexpr、static_assert、noexcept、auto、内联命名空间和部分 lambda 等。开发团队对该版本中的一些功能进行了重构,包括基础重构、插入 #include 用于未定义的标识符 “提取功能” 重构 “重新排列参数列表” 重构名称同步等。社区对于 Qt Creator 2.5 的一个较大的贡献是 TODO 插件,但是由于缺乏一些优化,该插件默认是禁用状态,你可以通过 Help/About Plugins 操作来启用它。
2012 年 05 月 11 日,Qt Creator 2.5 正式版发布,该版本诸多新特性和使用上的改进。
2012 年 09 月 12 日,Qt Creator 2.6 beta 发布,不再支持 Symbian。
2014 年 04 月 17 日,Qt Creator 3.1.0 正式发布,实现了对于 iOS 的完全支持,新增 WinRT、Beautifier 等插件,废弃了无 Python 接口的 GDB 调试支持,集成了基于 Clang 的 C/C++ 代码模块,并对 Android 支持做出了调整。
(二)快捷键与效率提升
创建新文件:使用 Ctrl+N 快捷键可以快速创建新的源文件、头文件、表单等。例如,按下 Ctrl+N 后选择 “C++ Class”,然后输入类名和保存路径,即可创建一个新的 C++ 类文件。
定义触发片段:可以自定义触发片段,在工具 -> 选项 -> 文本编辑器 -> 片段中添加代码,在代码中通过触发的字符来快捷输入内容,提升重复代码的编写效率。
代码注释:除了常规的双斜杠 “//” 单行注释和 “/* */” 多行注释外,Qt creator 还有一种注释方式,三个斜杠 “///”,输入后写入的注释是蓝色字体,回车后会自动创建一行新的注释,对于实时写大段的注释时非常方便,并且字体高亮,很直观。
补全输入:可以定义快捷键来实现快速补全。打开工具 -> 选项 -> 环境 -> 键盘,然后搜索栏输入 comp 就会看到 “Complete This”,在下方定义自己习惯的快捷键,注意不要和系统或其他软件的快捷键有冲突。点击 Record 按钮输入组合快捷键即可。
快捷复制:在编码中可能需要快捷复制一行代码,然后进行修改。可以设置快捷键来实现,区分了向上和向下复制一行,分别设置快捷键。如果只是复制一行的话,只要将光标移到该行就可以复制了,不需要选中,如果要同时复制多行,就需要选中多行,然后同样的快捷键进行复制。
快捷移动:设置快捷键可以实现快捷向上或向下移动代码。如果只是移动一行的话,只要将光标移到该行就可以移动了,不需要选中,如果要同时移动多行,就需要选中多行,然后同样的快捷键进行移动。
函数说明:在函数名的上一行,输入 “/**” 然后回车,就会自动根据该函数创建注释。
快速给函数添加定义:在头文件中声明一个函数过后,可以通过快捷键快速在 cpp 文件中创建函数定义。快捷键,Alt+Enter。
创建书签:在源代码比较多的情况下,在一些关键位置可以直接插入一个书签,后期可以通过切换书签来快速定位到代码位置。插入 / 取消书签,快捷键 “Ctrl + M”,切换书签,快捷键 “Ctrl +.”。
同步列输入:按住 alt 键,然后用鼠标向下拖动选择要同步输入的列,就会自动进入到该模式,直接输入即可。
(三)跨平台支持
Qt Creator 支持各种主流操作系统和编程语言,因此可以使用 Qt Creator 进行跨平台开发。
Windows:Windows 平台是 Qt Creator 最广泛使用的平台之一,在 Windows 上使用 Qt Creator 开发桌面应用程序和移动应用程序非常方便。开发者可以使用 Visual Studio 或 MinGW 编译器创建项目并在 Qt Creator 中导入代码,或者使用 Qt Creator 自带的编译器。
macOS:Qt Creator 在 macOS 上也有良好的支持。开发者可以使用 Xcode 或 Clang 编译器,在 macOS 系统上轻松开发 Qt 程序。
Linux:Qt Creator 在 Linux 上具有原生支持,允许开发者使用各种 Linux 发行版开发 Qt 应用程序。Qt Creator 还能够处理各种不同架构的 Linux 平台,包括 ARM 和 x86。
Android:Qt Creator 支持 Android 平台,可以使用 Android SDK 开发 Qt 应用程序。并且可以生成 apk 文件以进行部署。
iOS:Qt Creator 可以帮助开发者在 iOS 平台上创建 Qt 应用程序,并使用 Xcode。
(四)工具介绍与使用
主要特性:
跨平台支持:支持 Windows、macOS 和 Linux 操作系统,可以开发和部署跨平台应用程序。
项目管理:支持多种项目模板,能够轻松创建 Qt Widgets 应用、Qt Quick 应用以及控制台应用等。提供方便的项目管理工具,可以处理大型项目的文件和资源。
代码编辑器:高亮显示语法、智能代码补全和代码片段。内置代码重构工具,支持快速重命名变量、方法等。支持多种编程语言,如 C++、QML、JavaScript 等。
图形用户界面设计:提供 Qt Designer,用于设计和预览 GUI 界面。支持拖放式的 GUI 设计,可以快速创建和调整窗口小部件。
调试器:内置强大的调试器,支持 GDB 和 LLDB。提供断点、变量查看、表达式求值等功能,帮助开发者快速定位和修复问题。
版本控制:集成了 Git、Subversion 和 Mercurial 等版本控制系统。提供直观的版本控制界面,方便进行代码提交、查看历史记录和处理冲突。
构建系统:支持多种构建系统,包括 QMake、CMake 和 Qbs。提供灵活的构建配置,可以根据不同的目标平台进行定制化构建。
文档和帮助:内置 Qt 参考文档,可以快速查阅 API 说明和使用示例。支持上下文相关的帮助,能够在代码编辑器中直接获取所需信息。
官网下载地址与安装步骤:
Windows:访问 Qt 官方下载页面,下载适用于 Windows 的安装程序。运行安装程序,选择组件,根据提示完成安装过程,安装完成后,启动 Qt Creator。
macOS:访问 Qt 官方下载页面,下载适用于 macOS 的安装程序。打开下载的安装程序文件,并按照提示拖动 Qt 安装程序到应用程序文件夹。选择需要的 Qt 版本和组件。完成安装后,打开应用程序文件夹中的 Qt Creator。
Linux:访问 Qt 官方下载页面,下载适用于 Linux 的安装程序。打开终端,导航到下载目录,并运行以下命令:chmod +x qt-unified-linux-x64-.run,./qt-unified-linux-x64-.run。按照提示选择需要的 Qt 版本和组件。完成安装后,在终端中输入 qtcreator 启动 Qt Creator。
使用步骤:
创建新项目:打开 Qt Creator,选择 File > New File or Project…。选择一个项目模板,例如 Qt Widgets Application 或 Qt Quick Application,然后点击 Choose…。
配置项目:输入项目名称和选择项目位置。选择需要的构建工具和 Qt 版本。
设计用户界面:在项目中,打开.ui 文件(对于 Qt Widgets 项目)或.qml 文件(对于 Qt Quick 项目)。使用拖放工具设计界面。
编写代码:打开对应的源文件,编写逻辑代码和事件处理函数。
构建和运行项目:点击工具栏中的 Build 按钮,或选择 Build > Build Project。点击工具栏中的 Run 按钮,或选择 Run > Run,运行你的应用程序。
示例项目:
Qt Widgets 应用:选择 Qt Widgets Application 模板,设计界面,在设计视图中添加按钮、标签等控件,编写代码,构建并运行项目。
Qt Quick 应用:选择 Qt Quick Application 模板,在 main.qml 中编写 QML 代码,构建并运行项目。
(五)编程软件选择
QT 编程通常倾向于使用两大软件工具:QT CREATOR 和 VISUAL STUDIO。
QT CREATOR:
简介:QT CREATOR 是专为 QT 开发而设计的官方 IDE。它将代码编辑、调试、UI 设计以及其他开发所需功能整合在一起,为开发者提供了一个高效的开发环境。
优势:代码编辑器支持语法高亮和代码补全,使得编程更加高效。调试器集成了多种调试工具,比如 GDB 和 CDB,帮助开发者快速定位和修复代码中的错误。界面设计器则允许通过拖放组件来设计 GUI,大幅度减少了编码工作量。支持跨平台开发,这意味着开发者可以在 Windows、Mac OS、Linux 等多个操作系统上使用它来开发应用程序。
VISUAL STUDIO:
简介:对于熟悉或偏好 Microsoft 开发生态的开发者,VISUAL STUDIO 提供了另一个强大的选择。通过安装 QT VS 工具插件,开发者可以在 VISUAL STUDIO 环境中进行 QT 应用的开发。
优势:不仅使得代码编写和调试过程变得高效,而且能够充分利用 VISUAL STUDIO 强大的功能,如代码分析、版本控制和团队合作工具等。虽然 VISUAL STUDIO 主要面向 Windows 平台,但它也支持跨平台开发,尤其是通过使用 MSVC 或 MinGW 编译器。
(六)编码与跨平台应用开发
Qt Creator 是一款由 Qt 基金会开发的跨平台集成开发环境 (IDE),支持 C++ 和 QML 语言开发。Qt Creator 提供了代码编辑、编译、调试、自动补全等功能,为开发者提供了高效便捷的开发体验。
项目设置:在打开 Qt Creator 后,点击 “新建项目” 按钮,选择 “应用程序”,然后选择 “Qt Widgets 应用程序” 模板。在下一步中,选择项目名称和存储位置,并根据需要选择其他选项。完成后,单击 “完成” 按钮。
界面设计:在 Qt Creator 中,用户界面设计是通过拖放窗口小部件来实现的。该应用程序将包括一个文本编辑器和一个按钮,单击该按钮将打开一个对话框,要求用户输入文件名。当用户输入文件名并单击 “确定” 按钮时,应用程序将保存文本编辑器中的内容到指定的文件中。首先,在 “设计” 视图中打开主窗口的 ui 文件。将一个文本编辑器和一个按钮从工具箱拖放到主窗口中。按住 Ctrl 键并单击这两个窗口小部件,然后单击 “布局水平” 按钮。这将使文本编辑器和按钮成为同一行的并列控件。最后,可以更改控件的属性以适应。
(七)Qt 入门与快速搭建跨平台桌面应用
Qt 概述:
简介:Qt 是一个跨平台的 C++ 开发框架,广泛用于创建桌面、移动和嵌入式应用程序。它提供了一组全面的工具和库,帮助开发者在单一的开发环境中构建一致的应用程序,同时支持 Windows、Linux、macOS、iOS、Android 等多种平台。
安装选择:选择适合的 Qt 版本,推荐选择稳定版本进行开发。访问 Qt 官网选择与你开发环境相匹配的版本进行下载。Qt 提供了免费的开源许可证用于个人和商业用途,也提供了商业版的许可证,拥有更多的技术支持和服务。
安装与配置:
Windows:下载安装包后,按照向导一步步进行安装。确保在 Qt 安装目录下的 bin 文件夹中添加到系统路径。
Linux:使用包管理器(如 apt 或 yum)安装 Qt。具体命令依赖于所使用的 Linux 发行版。
macOS:从 Qt 官方网站下载安装包进行安装,同样需要将 Qt 目录的 bin 文件夹添加到 PATH 环境变量中。
安装 Qt Creator IDE:Qt 的集成开发环境(IDE)是 Qt Creator。在 Qt 官网下载 Qt Creator,根据提示完成安装。安装完成后,通过双击.desktop 文件或从系统应用列表中启动 Qt Creator。
Qt Widgets 快速上手:
项目创建与基本界面设计:在 Qt Creator 中新建一个 Qt Widgets 应用。选择 “文件”>“新建”>“Qt Widgets Application”,输入项目名称和目标文件夹路径。在项目创建过程中,选择合适的编译器和库。在项目目录中,打开主窗口文件(通常是 main.cpp),引入 Qt Widgets 模块,创建一个基本的窗口界面。
添加和布局控件:引入 Qt Widgets 的其他模块来添加按钮、文本框等控件,并使用 QVBoxLayout 或 QHBoxLayout 进行布局。
简单事件处理与响应:为按钮添加事件处理器来响应用户操作。
Qt 信号与槽机制:
信号与槽的定义:信号与槽机制是 Qt 中用于组件间通信的重要机制。信号用于表示某个事件的发生(如按钮点击),而槽用于指定事件发生后的处理函数。
示例代码:定义一个类,在类中创建按钮并连接信号与槽,实现按钮点击后的响应。
Qt 资源管理:
管理图标、图片、字体资源:Qt 提供了资源管理工具来管理应用程序的资源文件,如图标、图片和字体。资源文件通常放在.ui 或.qrc 格式中。创建资源文件,将资源文件添加到项目中,然后在代码中使用这些资源。
Qt 项目部署与跨平台测试:
生成可执行文件与打包应用:使用 Qt Creator 的内置打包功能,可以将你的 Qt Widgets 应用打包成可执行文件。在项目设置中选择正确的构建目标(如桌面应用程序、iOS 应用等),然后点击 “Build & Run” 或 “Deploy” 按钮来生成可执行文件。
跨平台测试与优化:跨平台测试通常涉及在不同操作系统
二、Qt Creator 支持人工智能的功能
GitHub Copilot 集成
作为技术预览在 Qt Creator 11 中发布,在编写 C++/Qt 代码时,能够提供 AI 驱动的代码建议。
随着生成式 AI 的火热,Qt Group 将 GitHub Copilot 接入 Qt Creator 集成开发环境。GitHub Copilot 集成在 Qt Creator 11 中作为技术预览发布,为开发者在编写 C++/Qt 代码时提供 AI 驱动的代码建议。例如,在 Qt Creator 的编辑器中,GitHub Copilot 可以根据项目的上下文和风格约定,建议代码行、完整的函数和测试用例。开发者可以将建议作为一个整体应用,也可以逐字应用部分建议。
可将编码任务的完成速度提高 55%,包括自动完成代码、将注释转化为代码、基于现有代码创建测试用例和代码文档等。
借助 GitHub Copilot 集成,开发者可专注于复杂和创新的软件创建,而不是处理模板或重复代码。GitHub Copilot 最多可将编码任务的完成速度提高 55%。开发者可以从以下用例中的上下文感知建议中受益:键入时自动完成代码、将注释转化为代码、基于现有代码创建测试用例以及基于现有代码创建代码文档。
需要从 GitHub 单独订阅和许可,且 Qt Group 提醒用户其并非完全可信,需仔细甄别并纠错,同时要打开过滤器避免版权纠纷,不允许其使用代码片段或建议来训练 AI 算法。
GitHub Copilot 是一个商业的代码辅助工具,只有 30 天免费试用期,随后每月收费 10~19 美元(个人每月至少 10 美元,企业许可证每月至少 19 美元)。尽管集成了 GitHub Copilot,Qt Group 同时也提醒用户:GitHub Copilot 并非完全可信,其提供的代码也不一定有用,开发者需要仔细甄别并纠错。其次,用户最好是打开 GitHub Copilot 的过滤器,然后筛掉没有开源许可证的软件,以避免不必要的版权纠纷。最后,Qt Group 还建议用户不允许 GitHub Copilot 使用代码片段或建议来训练 AI 算法。
要使用 Copilot 插件,需要一个有效的 GitHub Copilot 订阅,并且已安装 GitHub Copilot Neovim 插件(需 Node.js)。设置 Copilot 首选项时,转到首选项 > Copilot,选择启用 Copilot 来使用 Copilot,选择登录来登录订阅、激活设备并授权 GitHub Copilot 插件。在 Node.js 路径中,输入 Node.js 可执行文件的完整路径;在 agent.js 路径中,输入 Copilot Neovim 插件安装文件夹中的 agent.js 路径。选择自动请求以在更改时接收当前文本光标位置的建议,选择使用代理以通过代理服务器连接到 Copilot 服务器,并在代理主机、代理端口中输入相应信息,还可选择拒绝未经授权以防止接受来自代理服务器的未经授权证书所带来的安全风险,以及选择保存代理密码以保存用于验证代理服务器的密码(注意密码以不可安全的方式保存)。
在 “编辑” 模式下编写代码,并且启用 “自动请求”,Copilot 会在输入时自动提出建议。要手动在当前编辑器的光标位置请求一个建议,可以在定位器中输入 t(请求 Copilot 建议)。将鼠标悬停在建议上以显示一个带有和按钮的工具栏,以便在 Copilot 建议之间切换。要全部应用一个建议,选择应用或按键;要逐字应用一个建议,选择应用单词或按 Alt+Right;要拒绝一个建议,按 Esc 或箭头键。
可以选择全局或项目级别为特定项目开启和关闭 Copilot 建议。要全局开启或关闭 Copilot 建议,选择(切换 Copilot)按钮,这也会相应地设置首选项 > Copilot 中启用 Copilot 的值。要为特定项目开启或关闭 Copilot 建议,转到项目 > 项目设置 > Copilot,清除使用全局设置,选择或清除启用 Copilot。
三、Qt Creator 与其他支持人工智能的 IDE 比较
与其他常见 IDE 的对比
Qt Creator 作为一款支持人工智能的跨平台 IDE,在与其他常见 IDE 的比较中展现出了独特的优势和特点。
1、Qt Creator 与 QDevelop 的对比:
Qt Creator 是 Nokia 官方推出的跨平台开源 IDE,而 QDevelop 在 Qt 4.5 版以前是很多开发者的首选。然而,自 2009 年以后,QDevelop 的开发进度缓慢,导致使用人数减少。相比之下,Qt Creator 具有界面简洁、操作容易、与 Qt 结合完美等优点,虽然资历尚浅,功能稳定性有待提高,但它的冲击力和前瞻性更强。
2、Qt Creator 与 Eclipse 的对比:
Eclipse 是著名的开源 IDE,扩展性好,有业界巨头和开源社区支持,能以插件形式支持 Qt 开发。虽然还不是很理想,但值得信赖。Qt Creator 则在与 Qt 的结合上更加完美,具有专门为 Qt 开发设计的功能,如 Qt Designer、Qt Assistant 等集成工具。不过,Eclipse 的插件系统更加 “战斗硬化”,有更多的第三方插件可供选择。
3、Qt Creator 与 KDevelop 的对比:
KDevelop 一般只能在 X11 平台上使用,不能跨平台,易用性不强。而 Qt Creator 支持各种主流操作系统,具有跨平台的优势。
4、Qt Creator 与 Monkey Studio 的对比:
Monkey Studio 有潜力但使用人少。Qt Creator 作为官方推出的 IDE,具有更广泛的用户基础和更完善的功能支持。
5、Qt Creator 与 Code::Blocks 的对比:
Code::Blocks 界面与 Visual Studio 相似,但安装配置复杂,对中文支持不够理想。Qt Creator 在安装和配置上相对简单,并且对多种编程语言的支持更加完善。
6、Qt Creator 与 Visual Studio 的对比:
Visual Studio 功能强大,与 Qt 集成可集合两者长处,但收费且 IDE 不能跨平台。Qt Creator 是跨平台开源 IDE,免费使用,虽然在某些功能上可能不如 Visual Studio 强大,但在跨平台开发方面具有优势。
7、Qt Creator 与 Visual Studio Code的对比:
比较中。。。。。。
四、Qt Creator 作为跨平台 IDE 的优势
- 跨平台支持
Qt Creator 作为一款强大的跨平台集成开发环境(IDE),在跨平台支持方面表现出色。它能够支持 Windows、Linux 和 macOS 等多个操作系统,为开发者提供了极大的便利。
支持 Windows、Linux 和 macOS 等多个操作系统,开发者可以在不同平台下无缝切换。
Qt Creator 在不同操作系统下都能提供一致的开发体验。无论是在 Windows 平台上进行桌面应用开发,还是在 macOS 上进行移动应用开发,亦或是在 Linux 上进行嵌入式系统开发,开发者都可以使用 Qt Creator 进行高效的开发工作。
在 Windows 平台上,Qt Creator 可以与 Visual Studio 或 MinGW 编译器配合使用,为开发者提供了丰富的开发选择。开发者可以轻松地创建项目并在 Qt Creator 中导入代码,或者使用 Qt Creator 自带的编译器进行开发。
在 macOS 上,Qt Creator 可以与 Xcode 或 Clang 编译器配合使用,让开发者能够在 macOS 系统上轻松开发 Qt 程序。Qt Creator 提供了与 macOS 系统深度集成的功能,使得开发者可以充分利用 macOS 的优势进行开发。
在 Linux 上,Qt Creator 具有原生支持,允许开发者使用各种 Linux 发行版开发 Qt 应用程序。Qt Creator 还能够处理各种不同架构的 Linux 平台,包括 ARM 和 x86,为开发者提供了广泛的应用场景。
2. 集成开发环境
Qt Creator 作为一个集成开发环境,集成了众多功能,为开发者提供了一站式的开发体验。
集成了代码编辑、调试、项目管理等功能,提供一站式开发体验。
Qt Creator 的代码编辑器功能强大,具有语法高亮、代码自动完成、静态代码检验等功能。它可以帮助开发者快速编写规范的代码,提高开发效率。同时,代码编辑器还支持多种编程语言,如 C++、QML、JavaScript 等,满足了不同开发者的需求。
在调试方面,Qt Creator 内置了强大的调试器,支持 GDB 和 LLDB。它提供了断点、变量查看、表达式求值等功能,帮助开发者快速定位和修复问题。开发者可以在 Qt Creator 中轻松地进行调试工作,提高程序的稳定性和可靠性。
项目管理功能也是 Qt Creator 的一大亮点。它支持多种项目模板,能够轻松创建 Qt Widgets 应用、Qt Quick 应用以及控制台应用等。开发者可以方便地管理项目文件和资源,进行项目的构建和运行。同时,Qt Creator 还支持版本控制,集成了 Git、Subversion 和 Mercurial 等版本控制系统,方便开发者进行代码提交、查看历史记录和处理冲突。
3. 强大的代码分析工具
Qt Creator 基于 LLVM/Clang,提供了高效的代码分析和格式化功能。
基于 LLVM/Clang,提供高效的代码分析和格式化功能。
LLVM/Clang 是一种先进的编译器技术,它为 Qt Creator 提供了强大的代码分析能力。Qt Creator 可以对代码进行静态分析,检测潜在的错误和问题,提高代码的质量。同时,它还可以对代码进行格式化,使代码更加规范和易于阅读。
代码分析功能可以帮助开发者在编写代码的过程中及时发现问题,避免潜在的错误。它可以检测变量未初始化、类型不匹配、内存泄漏等问题,提高程序的稳定性和可靠性。格式化功能则可以使代码更加规范,提高代码的可读性和可维护性。
4. 灵活的构建系统
Qt Creator 支持 CMake,可以轻松配置和管理项目构建。
支持 CMake,可以轻松配置和管理项目构建。
CMake 是一种跨平台的构建系统,它为 Qt Creator 提供了灵活的构建配置能力。开发者可以使用 CMake 来管理项目的构建过程,包括编译选项、链接选项、依赖库等。CMake 的使用可以使项目的构建更加自动化和可重复,提高开发效率。
Qt Creator 对 CMake 的支持非常友好,开发者可以在 Qt Creator 中轻松地配置 CMake 项目。Qt Creator 提供了直观的界面和工具,帮助开发者进行 CMake 项目的构建和管理。同时,Qt Creator 还支持其他构建系统,如 QMake 和 Qbs,满足了不同开发者的需求。
5. 社区支持
Qt Creator 拥有活跃的开源社区,开发者可以轻松获取帮助和贡献代码。
拥有活跃的开源社区,开发者可以轻松获取帮助和贡献代码。
Qt Creator 的开源社区非常活跃,开发者可以在社区中获取到丰富的资源和帮助。社区中提供了大量的教程、文档、示例代码等,帮助开发者快速上手 Qt Creator。同时,开发者还可以在社区中提出问题,得到其他开发者的解答和支持。
开发者也可以积极参与到 Qt Creator 的开源社区中,贡献自己的代码和经验。社区鼓励开发者分享自己的项目和代码,促进 Qt Creator 的发展和进步。通过参与社区,开发者可以与其他开发者交流经验,提高自己的技术水平。
五、如何在 Qt Creator 中利用人工智能技术
1. 使用 GitHub Copilot
在 Qt Creator 中接入 GitHub Copilot,实现代码建议等功能。
Qt Creator 11 中作为技术预览发布了 GitHub Copilot 的集成,为开发者在编写 C++/Qt 代码时提供了强大的 AI 驱动的代码建议。安装过程如下:安装基本指南可参考 “Use GitHub Copilot | Qt Creator Documentation”。安装完成后,检查是否登录成功可通过 “编辑 ->preferences->copilot”,里面第一个按钮是 “sign out xxxxx(xxxx 是自己的 github copilot 账户)”,表示登录成功。
要使用 Copilot 插件,需要一个有效的 GitHub Copilot 订阅,并且已安装 GitHub Copilot Neovim 插件(需 Node.js)。设置 Copilot 首选项时,转到 “首选项> Copilot”,选择 “启用 Copilot” 来使用 Copilot,选择 “登录” 来登录订阅、激活设备并授权 GitHub Copilot 插件。在 “Node.js 路径” 中,输入 Node.js 可执行文件的完整路径;在 “agent.js 路径” 中,输入 Copilot Neovim 插件安装文件夹中的 agent.js 路径。选择 “自动请求” 以在更改时接收当前文本光标位置的建议,选择 “使用代理” 以通过代理服务器连接到 Copilot 服务器,并在 “代理主机、代理端口” 中输入相应信息,还可选择 “拒绝未经授权” 以防止接受来自代理服务器的未经授权证书所带来的安全风险,以及选择 “保存代理密码” 以保存用于验证代理服务器的密码(注意密码以不可安全的方式保存)。
在 “编辑” 模式下编写代码,并且启用 “自动请求”,Copilot 会在输入时自动提出建议。要手动在当前编辑器的光标位置请求一个建议,可以在定位器中输入 “t(请求 Copilot 建议)”。将鼠标悬停在建议上以显示一个带有和按钮的工具栏,以便在 Copilot 建议之间切换。要全部应用一个建议,选择 “应用” 或按键;要逐字应用一个建议,选择 “应用单词” 或按 “Alt+Right”;要拒绝一个建议,按 “Esc” 或箭头键。
可以选择全局或项目级别为特定项目开启和关闭 Copilot 建议。要全局开启或关闭 Copilot 建议,选择 “(切换 Copilot)按钮”,这也会相应地设置 “首选项 > Copilot” 中 “启用 Copilot” 的值。要为特定项目开启或关闭 Copilot 建议,转到 “项目 > 项目设置 > Copilot”,清除 “使用全局设置”,选择或清除 “启用 Copilot”。
2. 五子棋 AI 实现案例
通过 min-max 算法及 alpha-beta 剪枝优化算法实现五子棋 AI,并在 Qt Creator 中实现 GUI。
五子棋作为全国智力运动会竞技项目之一,是具有完整信息的、确定性的、轮流行动的、两个游戏者的零和游戏,是一个典型的博弈问题。玩法有两种,本次案例采用第一种玩法,即双方分别使用黑白两色的棋子,下在棋盘直线与横线的交叉点上,先形成五子连线者获胜。
五子棋的具体规则为:对局双方各执一色棋子,棋盘一共 15 行 15 列,225 个下棋点。空棋盘开局,黑先、白后,交替下子,每次只能下一子。棋子下在棋盘的空白点上,棋子下定后,不得向其它点移动,不得从棋盘上拿掉或拿起另落别处。黑方的第一枚棋子必须下在天元点上,即中心交叉点。轮流下子是双方的权利,但允许任何一方放弃下子权(即:PASS 权)。
五子棋博弈算法的具体实现:
算法定义:
由于是零和游戏的博弈问题,因此针对此问题的经典算法为 min-max 算法以及针对其的 alpha-beta 剪枝优化算法。
设游戏的两个游戏者为 MAX 和 MIN。MAX 先下棋,然后两人轮流出招,对于每一步当前的棋盘局面,使用一个评估函数 score (x) 来评价 MAX 距离游戏胜利的远近。MAX 越容易获得胜利,score (x) 的值就越大。
算法思想:
对于 MAX 来说,他的每一步棋都要使得当前棋盘局面的评估函数最大,即 max (score (board [r][l])),r、l 表示 MAX 下的棋子的位置。而相反,对于 MIN 来说,他的每一步棋都要使得当前棋盘局面的评估函数最小,即 min (score (board [r][l])),r、l 表示 MIN 下的棋子的位置。
因此,使用深度有限搜索的方法,即限制问题搜索的深度为 depth(depth 表示 MAX 和 MIN 从目前棋盘轮流下子的次数),一旦搜索深度到达 depth 就计算预测棋盘的得分,然后往上回溯。
以 min-max 算法为例,cpp 代码如下:
void chess_board::min_max_search(QTextBrowser *detail_info)
{score_next = max_sear(0, detail_info);
}int chess_board::max_sear(int deep, QTextBrowser *detail_info)
{if (deep == depth)return cal_score(first_me);int v = -0x3f3f3f3f;int old_a = 0;for (int l = 0; l < board_col; l++)for (int r = 0; r < board_row; r++){if (board[r][l] == '0'){set_temp_chess(r, l, true);v = max(v, min_sear(deep + 1, detail_info));if (deep == 0 && v!= old_a){char tip_out[1005] = {0};sprintf(tip_out, "update max:\n l = %d, r = %d \nv = %d\n", l, r, v);detail_info->textCursor().insertText(tip_out);next.set_rl(r, l);old_a = v;}clear_temp_chess(r, l);}}return v;
}int chess_board::min_sear(int deep, QTextBrowser *detail_info)
{if (deep == depth)return cal_score(first_me);int v = 0x3f3f3f3f;for (int l = 0; l < board_col; l++)for (int r = 0; r < board_row; r++){if (board[r][l] == '0'){set_temp_chess(r, l, false);v = min(v, max_sear(deep + 1, detail_info));clear_temp_chess(r, l);}}return v;
}
实现细节:由于只有一个棋盘,因此要注意 dfs 回溯的时候要清除临时下的棋子。MAX 根节点,也就是最高层,每次更新 v 的时候记录下落子的位置,搜索完后对应的位置就是人工智能要落子的位置。
但 min-max 算法缺点明显:太慢了。如果遍历的深度为 n,每一层要对 225 个下棋的点进行遍历,每次遍历又是递归调用。因此每一次下棋就需要对 225n 中棋盘进行分数评估,加上分数评估也需要时间,因此算法复杂度很高,一般 depth=2 的时候每一步的等待时间要超过 10s。
αα-ββ 剪枝算法:
为了解决上述 MAX-MIN 算法复杂度高的问题,αα-ββ 剪枝算法应运而生。
剪枝思想考虑图中画圈的部分:已知 MAX 要选择所有 MIN 已经造成的得分中最高的那一个位置落子;对于图中的①号节点,其遍历过②号节点以及对应的子树之后目前的得分是 4;其开始遍历自己的第二棵子树,其根节点为③,节点③遍历自己的第一个子树后获得的值为 40;由于节点①取最大值,因此节点③目前的值有保留的必要。继续搜索第二棵子树,发现第二棵子树的根节点对应的值为 -36;由于节点③对应的是 MIN 玩家,要选择最小的位置,因此 MIN 玩家更新自己落子的位置,节点③的值更新为 -36;由于节点③对应的是 MIN 玩家,其选择的落子位置得分不会比 -36 大;因此节点③就没有往后搜索的必要了,因此后面的搜索都可以去掉。
在 Qt Creator 中实现 GUI:
(1)创建部件:整一个棋盘就是一个窗口部件,直接创建一个 app 项目继承于 QWidget 控件,此处不使用 ui 设计,以便最终可以得到该部件的类文件,方便移植到总窗口中。工程创建完成后,就得到一个窗口。
(2)定义棋盘各类边界和信息:此处定义的棋盘为 15x15 大小,此大小使用宏定义或定义成变量,后边会经常使用。还需要定义多个间隔变量,如棋盘与边界的距离、棋格的大小,这样后期直接初始化中可以随意修改而不影响棋盘架构。定义枚举 enum ChessType {noChess, blackChess, whiteChess}; 代表棋子类型,定义一块 ChessType 类型的二维数组空间 chessInfo [15][15]; 该空间代表当前棋盘上存在的棋子信息。在构造函数中为定义的变量赋初值,然后根据变量信息设置窗口的大小,并固定窗口大小。
(3)绘制棋盘:QWidget 部件具有绘画事件 virtual void paintEvent (QPaintEvent *event),是个虚函数,我们的类是由 QWidget 类继承而来,能够对绘画事件进行重写,当发生重新绘制或者更新窗口等绘制事件就会响应。
重写接口实现内容如下:
A、定义一个画家。
B、定义一只画笔,给画笔设置样式 (颜色、线条宽度、线条类型),并把画笔给画家。
C、调用画家的 drawPixmap 方法绘制棋盘背景图片。
D、通用画家的 drawLine 方法依次画横竖各 15 条线组成棋盘网格。
E、查看当前棋盘上棋子信息,当存在棋子时,以网格坐标为准推导绘制位置,绘制相应的棋子。
(4)添加资源文件:在项目当中,需要用到许多的图片文件,需要把图片放置到工程文件夹下,然后为工程添加资源文件,就能通过相对路径的方式调用文件。添加资源文件方法为新建一个资源文件夹 (文件 -> 新建)。然后工程目录下会生成资源文件夹,选择红框中的.qr 文件,右键选中 Open in Editor 进入编辑模式添加文件。资源文件调用时的相对路径是以 “:” 开头的,或着当不识别时,可以在以 “qrc:” 开头。
(5)鼠标捕获:我们下棋是用鼠标点击,当鼠标移动到下棋点的时候,需要让鼠标改变样式 (此处由箭头变成手指),来框定是否是下棋点。具体方法是重写鼠标移动事件 virtual void mouseMoveEvent (QMouseEvent *event)。当我们移动鼠标的时候就会产生该事件。鼠标移动事件默认是需要按住鼠标才会产生事件的,所以需要修改相关属性。
六、Qt Creator 在人工智能开发中的应用案例
1. 五子棋 AI 案例
详细介绍五子棋 AI 的实现过程,包括算法定义、思想、伪代码及实现细节。
算法定义与思想:
五子棋作为全国智力运动会竞技项目之一,是具有完整信息的、确定性的、轮流行动的、两个游戏者的零和游戏,是一个典型的博弈问题。本次案例采用双方分别使用黑白两色的棋子,下在棋盘直线与横线的交叉点上,先形成五子连线者获胜的玩法。
针对此问题的经典算法为 min-max 算法以及针对其的 alpha-beta 剪枝优化算法。设游戏的两个游戏者为 MAX 和 MIN。MAX 先下棋,然后两人轮流出招,对于每一步当前的棋盘局面,使用一个评估函数 score (x) 来评价 MAX 距离游戏胜利的远近。MAX 越容易获得胜利,score (x) 的值就越大。
对于 MAX 来说,他的每一步棋都要使得当前棋盘局面的评估函数最大,即 max (score (board [r][l])),r、l 表示 MAX 下的棋子的位置。而相反,对于 MIN 来说,他的每一步棋都要使得当前棋盘局面的评估函数最小,即 min (score (board [r][l])),r、l 表示 MIN 下的棋子的位置。因此,使用深度有限搜索的方法,即限制问题搜索的深度为 depth(depth 表示 MAX 和 MIN 从目前棋盘轮流下子的次数),一旦搜索深度到达 depth 就计算预测棋盘的得分,然后往上回溯。
伪代码及实现细节:
min-max 算法:
cpp 代码如下:
void chess_board::min_max_search(QTextBrowser *detail_info)
{score_next = max_sear(0, detail_info);
}int chess_board::max_sear(int deep, QTextBrowser *detail_info)
{if (deep == depth)return cal_score(first_me);int v = -0x3f3f3f3f;int old_a = 0;for (int l = 0; l < board_col; l++)for (int r = 0; r < board_row; r++){if (board[r][l] == '0'){set_temp_chess(r, l, true);v = max(v, min_sear(deep + 1, detail_info));if (deep == 0 && v!= old_a){char tip_out[1005] = {0};sprintf(tip_out, "update max:\n l = %d, r = %d \nv = %d\n", l, r, v);detail_info->textCursor().insertText(tip_out);next.set_rl(r, l);old_a = v;}clear_temp_chess(r, l);}}return v;
}int chess_board::min_sear(int deep, QTextBrowser *detail_info)
{if (deep == depth)return cal_score(first_me);int v = 0x3f3f3f3f;for (int l = 0; l < board_col; l++)for (int r = 0; r < board_row; r++){if (board[r][l] == '0'){set_temp_chess(r, l, false);v = min(v, max_sear(deep + 1, detail_info));clear_temp_chess(r, l);}}return v;
}
实现细节:由于只有一个棋盘,因此要注意 dfs 回溯的时候要清除临时下的棋子。MAX 根节点,也就是最高层,每次更新 v 的时候记录下落子的位置,搜索完后对应的位置就是人工智能要落子的位置。但 min-max 算法缺点明显:太慢了。如果遍历的深度为 n,每一层要对 225 个下棋的点进行遍历,每次遍历又是递归调用。因此每一次下棋就需要对 225n 中棋盘进行分数评估,加上分数评估也需要时间,因此算法复杂度很高,一般 depth=2 的时候每一步的等待时间要超过 10s。
αα-ββ 剪枝算法:
剪枝思想考虑图中画圈的部分:已知 MAX 要选择所有 MIN 已经造成的得分中最高的那一个位置落子;对于图中的①号节点,其遍历过②号节点以及对应的子树之后目前的得分是 4;其开始遍历自己的第二棵子树,其根节点为③,节点③遍历自己的第一个子树后获得的值为 40;由于节点①取最大值,因此节点③目前的值有保留的必要。继续搜索第二棵子树,发现第二棵子树的根节点对应的值为 -36;由于节点③对应的是 MIN 玩家,要选择最小的位置,因此 MIN 玩家更新自己落子的位置,节点③的值更新为 -36;由于节点③对应的是 MIN 玩家,其选择的落子位置得分不会比 -36 大;因此节点③就没有往后搜索的必要了,因此后面的搜索都可以去掉。
在 Qt Creator 中实现 GUI:
创建部件:整一个棋盘就是一个窗口部件,直接创建一个 app 项目继承于 QWidget 控件,此处不使用 ui 设计,以便最终可以得到该部件的类文件,方便移植到总窗口中。工程创建完成后,就得到一个窗口。
定义棋盘各类边界和信息:此处定义的棋盘为 15x15 大小,定义多个间隔变量,如棋盘与边界的距离、棋格的大小。定义枚举 enum ChessType {noChess, blackChess, whiteChess}; 代表棋子类型,定义一块 ChessType 类型的二维数组空间 chessInfo [15][15]; 该空间代表当前棋盘上存在的棋子信息。在构造函数中为定义的变量赋初值,然后根据变量信息设置窗口的大小,并固定窗口大小。
绘制棋盘:
QWidget 部件具有绘画事件 virtual void paintEvent (QPaintEvent *event),是个虚函数,我们的类是由 QWidget 类继承而来,能够对绘画事件进行重写,当发生重新绘制或者更新窗口等绘制事件就会响应。
重写接口实现内容如下:
A、定义一个画家。
B、定义一只画笔,给画笔设置样式 (颜色、线条宽度、线条类型),并把画笔给画家。
C、调用画家的 drawPixmap 方法绘制棋盘背景图片。
D、通用画家的 drawLine 方法依次画横竖各 15 条线组成棋盘网格。
E、查看当前棋盘上棋子信息,当存在棋子时,以网格坐标为准推导绘制位置,绘制相应的棋子。
添加资源文件:在项目当中,需要用到许多的图片文件,需要把图片放置到工程文件夹下,然后为工程添加资源文件,就能通过相对路径的方式调用文件。添加资源文件方法为新建一个资源文件夹 (文件 -> 新建)。然后工程目录下会生成资源文件夹,选择红框中的.qr 文件,右键选中 Open in Editor 进入编辑模式添加文件。资源文件调用时的相对路径是以 “:” 开头的,或着当不识别时,可以在以 “qrc:” 开头。
鼠标捕获:我们下棋是用鼠标点击,当鼠标移动到下棋点的时候,需要让鼠标改变样式 (此处由箭头变成手指),来框定是否是下棋点。具体方法是重写鼠标移动事件 virtual void mouseMoveEvent (QMouseEvent *event)。当我们移动鼠标的时候就会产生该事件。鼠标移动事件默认是需要按住鼠标才会产生事件的,所以需要修改相关属性。
2. 基于 ROS 与 QT 的开源项目
介绍基于 ROS 与 QT 的开源项目,包括安装指南、技术分析、应用场景及特点,展示了 Qt Creator 在机器人人机交互和点云处理中的应用。
项目介绍:在机器人开发领域,人机交互界面和点云处理是两个至关重要的环节。为了帮助开发者更好地在 Ubuntu 环境下进行这些工作,我们推出了一个基于 ROS(Robot Operating System)和 QT 框架的开源项目。该项目不仅提供了详细的安装指南,还深入讲解了如何将 QT 与 ROS 结合,创建强大的人机交互界面,并集成 PCL(Point Cloud Library)进行高级点云处理。
项目技术分析:
ROS 安装:项目提供了两种安装 ROS 的方法:一键式脚本安装和分步骤的手动安装指南。这两种方法都适用于 Ubuntu 20.04 及搭配 Noetic 版本的 ROS,确保开发者能够快速搭建开发环境。
Qt 安装:对于 QT 的安装,项目不仅提供了直接下载预配置安装包的选项,还详细介绍了从官方网站逐步下载安装的步骤。此外,还包含了如何解决 Qt Creator 运行问题的指南,确保开发者能够顺利启动并使用 Qt Creator。
ros_qtc_plugin 安装:为了进一步提升开发效率,项目详细介绍了如何将 ROS 开发插件安装至 Qt Creator。通过这一插件,开发者可以在 IDE 中方便地管理 ROS 工作空间和工程,极大地简化了开发流程。
Qt 制作 ROS 人机交互界面:项目深入讲解了如何通过 CMakeLists.txt 配置文件整合 QT 与 ROS,创建 UI 界面用于发送指令到 ROS 节点,并接收处理后的数据显示。通过控制 “小乌龟” 例子,展示了如何实现 UI 控制与 ROS 通信,为开发者提供了直观的实践案例。
PCL 点云处理:虽然项目中未直接提及 PCL 的详细步骤,但其背景设定为整合 PCL,意味着开发者需结合 ROS 的知识,自行探索如何在开发的项目中集成 PCL 库进行点云处理。这为开发者提供了更大的自由度和探索空间。
项目及技术应用场景:
机器人控制系统开发:通过 QT 创建直观的人机交互界面,控制机器人的运动和操作。
点云数据处理:结合 PCL 库,处理来自 ROS 的传感器数据,创建 3D 视图或其他点云应用功能。
科研项目:为研究人员提供了一个强大的工具,帮助他们在机器人领域进行实验和研究。
项目特点:
全面的安装指南:无论是 ROS 还是 QT,项目都提供了详细的安装步骤,确保开发者能够顺利搭建开发环境。
高效的开发工具:通过 ros_qtc_plugin,开发者可以在 Qt Creator 中方便地管理 ROS 工作空间和工程,提升开发效率。
直观的实践案例:通过控制 “小乌龟” 例子,展示了如何实现 UI 控制与 ROS 通信,为开发者提供了直观的实践案例。
开放的探索空间:虽然项目中未直接提及 PCL 的详细步骤,但其背景设定为整合 PCL,为开发者提供了更大的自由度和探索空间。