QT创建包含多个项目的工程以及各项目之间的调用

本文介绍了如何在QT环境中创建包含多个子项目的工程,并详细阐述了新建与添加已存在项目的方法,以及不同项目间的调用技巧,包括删除不必要的main.cpp、创建全局头文件和设置编译配置等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

QT创建包含多个项目的工程以及各项目之间的调用

在用QT做一个包含许多个小项目的大项目时,遇到了无法把多个项目合并到一个Pro的问题,后来经过艰苦尝试,终于可以在一个大项目下包含许多小项目了。但同时各个项目之间的调用又出现了问题,目前已解决。下面就把我的经验分享给大家。

一、创建包含多个小项目的大项目
1、第一种情况:在新建的empty project 下创建新的子项目
2、第二种情况:在新建的empty project 下添加已存在的项目
3、第三种情况:在已经编好的项目下创建新的子项目
4、第四种情况:在已经编好的项目下添加已存在的项目
1、在新建的empty project 下创建新的子项目。可以分为以下几步:
(1)文件 → 新建文件和项目 → 其他项目 → empty qmake project
(2)填写工程名、创建路径等信息。创建完成后如下图所示。(我创建的大项目叫untitled)
在这里插入图片描述(3)打开生成的Pro文件 → 手动输入TEMPLATE = subdirs
在这里插入图片描述(4)右键工程文件夹 → 新子项目 → 选择你想创建的项目(这里我创建一个widget,子项目名字叫untitled1)
创建完成后如下图所示
在这里插入图片描述2、在新建的empty project 下添加已存在的项目,步骤如下
(1)这里我们继续在1已经建好的empty project下添加,创建empty project的步骤和1一样。
(2)将你要添加的子项目的文件夹移到创建的大项目文件夹下,和大项目的Pro文件存储在一起。如下如所示(SignalAndSlot是我要添加的子项目):在这里插入图片描述

(2)右键工程文件夹 → add existing projects(QT版本5.14之前的版本好像没有这个选项,这个我也没有办法)→ 在弹出的窗口中选择你要添加的项目的Pro文件(我选中的是SignalAndSlot.Pro)
添加好之后如下图所示:
在这里插入图片描述

至此,第一种和第二种情况就介绍完毕了,但是不管是新建的还是添加的子项目在运行时还是独立的。而且每一个子项目下都有一个main.cpp,但是程序的入口只能有一个,假设我现在要在新建的子项目untitled1中调用添加的子项目SignalAndSlot,那么就删除掉SignalAndSlot下的main.cpp。调用的步骤如下:
(1)删除SignalAndSlot下的main.cpp
(2)为SignalAndSlot创建SignalAndSlot_global.h头文件
右键SignalAndSlot → addnew → c++ → c++ header file

### QT 创建项目后的工程文件结构及配置解读 在使用 QT 创建项目之后,生工程文件主要包括以下几个部分: #### 1. `.pro` 文件 这是项目的配置文件,用于定义编译选项、依赖库以及源文件列表等内容。它是一个简单的文本文件,可以通过编辑器手动修改。以下是常见的字段及其作用[^3]: - `TEMPLATE`: 定义项目类型(如 app 表示应用程序,lib 表示库)。 - `SOURCES`: 列出所有的 C++ 源文件路径。 - `HEADERS`: 列出所有的头文件路径。 - `FORMS`: 如果项目包含 UI 设计文件,则在此处列出这些 `.ui` 文件。 - `RESOURCES`: 配置资源文件(`.qrc`),用于管理图标、图片等静态资源。 示例代码如下: ```plaintext TEMPLATE = app CONFIG += console c++17 QT += core gui widgets SOURCES += main.cpp mywidget.cpp HEADERS += mywidget.h FORMS += mywidget.ui RESOURCES += resources.qrc ``` #### 2. `main.cpp` 文件 该文件通常是整个应用的入口点。它的主要功能是初始化 QApplication 或 QCoreApplication 对象,并运行事件循环。以下是一个典型的实现方式: ```cpp #include <QApplication> #include "mywidget.h" int main(int argc, char *argv[]) { QApplication app(argc, argv); MyWidget widget; widget.show(); return app.exec(); } ``` #### 3. 自定义类文件 (`*.h`, `*.cpp`) 如果项目包含了自定义窗口部件或其他逻辑模块,则会生相应的头文件和实现文件。例如,在创建一个基于 QWidget 的界面时,可能有以下文件结构: - **`mywidget.h`**: 声明了一个继承自QWidget的类MyWidget。 - **`mywidget.cpp`**: 实现了MyWidget中的方法。 示例代码片段: ```cpp // mywidget.h #ifndef MYWIDGET_H #define MYWIDGET_H #include <QWidget> class MyWidget : public QWidget { public: explicit MyWidget(QWidget *parent = nullptr); private: }; #endif // MYWIDGET_H // mywidget.cpp #include "mywidget.h" #include <QPushButton> MyWidget::MyWidget(QWidget *parent) : QWidget(parent){ QPushButton* button = new QPushButton("Click Me", this); setFixedSize(200, 100); } ``` #### 4. 用户界面设计文件 (`.ui`) 及其关联设置 当选择带有 GUI 支持的模板时,还会生一个多个 `.ui` 文件。这些文件描述了图形化用户界面布局,由 Qt Designer 编辑并保存为 XML 格式。构建过程中,它们会被转换 C++ 类以便于集到程序中。 #### 5. 资源文件 (`.qrc`) 此文件用于打包图像、翻译表以及其他外部数据资产。通过指定前缀和相对路径来组织资源项。下面展示了一种典型写法: ```xml <RCC> <qresource prefix="/images"> <file>icon.png</file> <file>background.jpg</file> </qresource> </RCC> ``` #### 6. 翻译支持相关文件 (`.ts`, `.qm`) 为了使应用程序国际化,可以利用 Qt Linguist 提供的功能来自动生多语言版本的支持文件。具体流程涉及 lupdate 工具提取待翻译字符串至 .ts 文件,再经人工或者机器完实际翻译工作后存储回原位置;最后借助 lrelease 将最终果转化为二进制形式即 qm 文件加载入系统环境变量之中以备调用[^4]. --- ### 总结 上述内容涵盖了 QT 创建工程项目后的主要组部分解析说明。每一种类型的文档都有特定用途且相互协作共同构完整的开发体系架构。
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值