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

QT

  • 使用子目录项目来 配置多个子工程/子模块
    • 简述
    • 项目配置概览
    • 项目的多工程配置
    • 使用多模块

特别鸣谢:

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

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

简述

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

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

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

项目配置概览

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

Qt - 使用子目录项目来 配置多个子工程/子模块_第1张图片

项目的多工程配置

如果需要管理多工程(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 

#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 

class SYNTOSYSTEMSHARED_EXPORT SynToSystem
{

public:
    SynToSystem();
    QString m_str;
};

#endif // SYNTOSYSTEM_H

syntosystem.cpp

#include "syntosystem.h"
#include 


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)

你可能感兴趣的:(C++,Qt,项目)