Qt - 使用子目录项目来 配置多个子工程/子模块

2023-11-18

特别鸣谢:

  1. Qt 之 pro 配置多个子工程/子模块
  2. Qt Creator创建子目录项目并自定义目标文件输出目录

使用子目录项目来 配置多个子工程/子模块

简述

我们在构建QT项目的时候,有时候希望每个界面分开编写,或者逻辑功能和界面分开编写,来解耦合,让我们的项目更多模块能够同时并行,而不是只有项目来完成所有的功能。咱们平时在写小项目的时候,直接使用一个QWidget Application就可以用来实现全部功能。

那么我们现在需要把某些功能编译成一个库,然后在主程序中对相关的库进行调用,我们需要用什么方式来实现呢?

就一起来思考一下这个问题吧,这篇文章也是记录我学习如何构建Qt多模块项目的一个过程。

项目配置概览

这次的实验项目的结构如下:

在这里插入图片描述

项目的多工程配置

如果需要管理多工程(pro),比如:库工程、界面工程,其中,每一个工程均可单独编译成功,但存在依赖关系。也就是说,lib2依赖于lib1,而UI依赖于lib2。

配置如下:

  • 配置TEMPLATE为subdirs设置多工程
  • 配置SUBDIRS,指定需要添加的工程模块
  • 配置CONFIG为ordered指定顺序编译

举例来说,本次编写的测试工程的.pro就需要如下方式来编写:

TEMPLATE = subdirs
CONFIG += ordered   # 按照SUBDIRS顺序来编译程序,保证先后的依赖关系
SUBDIRS += \    # 这里的先后顺序决定了编译顺序,每次编写的时候,需要先考虑清楚
    SynToSystem \
    TestTask

这样这个工程就可以在主程序里调用SynToSystem这个库里面的内容了。

main.cpp

#include "mainwindow.h"
#include <QApplication>

#include "../SynToSystem/syntosystem.h"


int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    SynToSystem syn;
    MainWindow w;
    w.set_tips_label_text(syn.m_str);
    w.show();

    return a.exec();
}

syntosystem.h

#ifndef SYNTOSYSTEM_H
#define SYNTOSYSTEM_H

#include "syntosystem_global.h"
#include <QString>

class SYNTOSYSTEMSHARED_EXPORT SynToSystem
{

public:
    SynToSystem();
    QString m_str;
};

#endif // SYNTOSYSTEM_H

syntosystem.cpp

#include "syntosystem.h"
#include <QDebug>


SynToSystem::SynToSystem()
{
    qDebug() << "Welcom to Syn to system.";
    m_str = "SynToSystem init.";
    qDebug() << m_str;
}

使用多模块

延续多工程,如果某一个工程功能比较多,我们必然要进行模块化。例如:界面工程包含:登录界面、设置界面、主界面。。。这时,我们就可以使用pri模块化了。 这里进行一个举例,项目代码中暂时没有演示这个方面:

include($$PWD/Login/Login.pri)
include($$PWD/Settings/Settings.pri)
include($$PWD/MainWindow/MainWindow.pri)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt - 使用子目录项目来 配置多个子工程/子模块 的相关文章

随机推荐

  • 初学者如何学好Java,过来人的经验之谈

    多看书 多下载一些java相关的资料 多看多打代码 然后思考总结 书读百遍 其义自现 如果找不到合适的资料 可以上北网论坛找下适合自己的免费视频学习资料 都是一些大神买来共享的本来收费的内容 比如 由简入深绝版Java系列课程 t cn 8
  • 网站分布式技术有哪些?

    分布式软件系统 Distributed Software Systems 是支持 分布式处理的软件系统 是在由 通信网络互联的多处理机体系结构上执行任务的系统 它包括分布式操作系统 分布式程序设计语言及其编译 解释 系统 分布式文件系统和
  • 不要再循环里抛出异常

    今天遇到一个bug 是因为循环中抛出了异常 导致之后的代码都没有执行 所以哇 这种抛出有可能中断程序执行的 运行中异常 不要在循环中抛出 只记录异常就可以了 举个栗子 反面示例 try throw new Exception 我发生异常啦
  • 2019 SIGGRAPH paper

    20190704 Image Science 1 Hyperparameter Optimization in Black box Image Processing using Differentiable Proxies 基于可微代理的黑
  • Linux部署项目

    一 Linux介绍 背景 Java项目通常基于windows系统进行开发 服务器部署则是基于Linux 1 1 Linux系统概述 Linux是一套免费使用 自由传播的类unix操作系统 支持多用户 多任何 支持多线程和多CPU的操作系统
  • idea技巧之同时编辑多行代码

    如何同时编辑多行代码 eclipse好像没有这种功能 有一次看到老师用eclipse写代码 10多行 每一行添加一个单引号 一个一个添加 慢的想死 想起做前端项目使用的 webstone可以同时编辑多行代码 现在看到idea 功能如此强大
  • Window10屏幕亮度无法调节尝试解决方法

    换成win10后突然屏幕亮度调节不了 尝试几种方法 失败方法一 注册表修改 1 首先 请大家在桌面上按下Windows徽标键 R键 打开运行菜单窗口 在窗口中输入 regedit 关键字 按下回车键之后打开注册表编辑器 2 打开注册表编辑器
  • vue中使用高德地图,只加载出地图logo,地图没有加载出来

    在使用vue开发的过程中 需要使用到高德地图 但按照高德地图的官方文档配置后 只显示高德地图的logo 但是始终加载不到地图 如下图所示 解决办法 将全局引用的的mockjs注释掉就可以解决这个冲突问题
  • Elaticsearch安装越南语分词器

    1 目标 实现支持英 德 法 葡萄牙 西班牙 俄 印尼 泰 繁中 简中 日 韩 越南 意大利 阿拉伯 土耳其 乌克兰 荷兰 波兰 19种文字的分词器 2 自带的分词器 英 english 德 german 法 french 葡萄牙 port
  • 用spss进行主成分分析

    此次同样通过一道例题讲解如何运用spss进行对数据的主成分分析 下表是我国2005年第1 2季度各地区城镇居民家庭收支基本情况的统计数据 根据这些数据进行主成分分析 并依据分析结果对地区城镇居民家庭收支情况进行排序和分类 地区 平均每户人口
  • 买《Kotlin从小白到大牛》专题视频课程,送配套纸质图书

    经过一年多时间的呕心沥血 Kotlin立体化图书 Kotlin从小白到大牛 即将与大家见面了 所谓立体化图书包括 电子图书 视频 课件和服务等内容 Kotlin从小白到大牛 纸质图书已经上市 为了答谢广大学员对智捷课堂以及关老师的支持 现购
  • python x=[random.randint(0,100) for i in range(50)]什么意思?列表解析

    如有错误欢迎指正 在写python的时候遇到一个问题 其中一段代码是x random randint 0 100 for i in range 50 这个用法叫 列表解析 这句代码的功能是生成一个具有50个0 100之间的整数 具体可以看下
  • Python:简易的串口收发程序

    Python 简易的串口收发程序 更新历史 20201204 首次发布 最近需要搞一个基于Python的串口程序 要求 能够将字符串形式的十六进制数 例如 12 34 CD EF 转化成对应的二进制数据后发送给一个串口设备 能够从串口设备接
  • ChatGPT做到人人都可以配置思科华为网络设备

    最近有个一个想法 chatgpt能不能帮忙配置网络设备 于是我开始在网上找了个拓扑图 然后我将拓扑图及需求 以prompt的形式发送给chatgpt 然后chatgpt根据我的要求 将所有节点的配置全部输出了出来 真是一个新时代来了 我觉得
  • AIOps 在美团的探索与实践 —— 故障发现篇

    摘要 AIOps 最初的定义是Algorithm IT Operations 是利用运维算法来实现运维的自动化 最终走向无人化运维 随着技术成熟 逐步确定为Artificial Intelligence for IT Operations
  • Java ee学习笔记

    Servlet简介 Servlet技术规范是JavaEE技术规范中的一个重要组成部分 Servlet是一种独立于平台和协议的服务器端的Java应用程序 可以生成动态的Web页面 实际上 Servlet不仅仅是用于返回HTML的页面的 比如
  • 创建简单的Windows驱动程序并与应用程序通信

    创建简单的Windows驱动程序并与应用程序通信 在本篇博客中 我们将创建一个简单的Windows驱动程序 并实现与用户模式应用程序的通信 我们将展示如何创建驱动程序 处理IRP请求 并在应用程序中使用CreateFile和WriteFil
  • MXNet==1.9.x 源代码编译流程(windows + python)

    只为mxnet for win开发做做小贡献 mxnet深度玩家 写在开头 注意windows powershell 第三方依赖 python git 7zip cmake ninja opencv等 的安装和运行版本 x64和x84 须统
  • 【算法】稳定匹配(C++版)

    由于学习需要 然后花费将近两天时间研究这个问题 然后用C 描述出来 具体内容看下面 问题描述 见百度百科 https baike baidu com item E7 A8 B3 E5 AE 9A E5 A9 9A E5 A7 BB E9 9
  • Qt - 使用子目录项目来 配置多个子工程/子模块

    QT 使用子目录项目来 配置多个子工程 子模块 简述 项目配置概览 项目的多工程配置 使用多模块 特别鸣谢 Qt 之 pro 配置多个子工程 子模块 Qt Creator创建子目录项目并自定义目标文件输出目录 使用子目录项目来 配置多个子工