qtcanpool 知 01:工程管理

本文详细介绍了一个基于Qt的工程管理模板的构建过程,包括从简单的可执行程序到包含库和插件的复杂项目的演进,以及如何管理和优化这些项目。

1. 前言

qtcanpool的工程管理来源于qtcreator源码,并进行了优化和改进,使之变为更通用的工程管理模板。

2. 演进

工程管理,不对,工程管理模板,这个有什么意义?

先来看看一个程序的主要组织结构:
程序组织结构

在开发QT程序的时候,大概会有下面几种组织形式:

  1. 一个可执行程序
  2. 一个可执行程序、若干个用户库
  3. 一个可执行程序、若干个用户库、若干个用户插件

下面看看QT程序的工程是如何演进的。

2.1. 一个可执行程序

功能:实现一个窗口类HelloCanpool,其包含一个QPushButton,Button文本显示为Hello Canpool。HelloCanpool的实例作为QMainWindow的中心窗体,效果图如下:
在这里插入图片描述

2.1.1. 创建

如何创建工程可以参考:qtcreator 手册
在这里插入图片描述
主要代码如下

  • hellocanpool.pro
QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++11

# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000

SOURCES += \
    hellocanpool.cpp \
    main.cpp \
    mainwindow.cpp

HEADERS += \
    hellocanpool.h \
    mainwindow.h
  • hellocanpool.cpp
#include "hellocanpool.h"
#include <QPushButton>
#include <QHBoxLayout>

HelloCanpool::HelloCanpool(QWidget *parent)
    : QWidget(parent)
{
   
   
    QPushButton *btn = new QPushButton("Hello Canpool");

    QHBoxLayout *lay = new QHBoxLayout();
    lay->addWidget(btn);

    setLayout(lay);
}
  • mainwindow.cpp
#include "mainwindow.h"
#include "hellocanpool.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
   
   
    HelloCanpool *hc = new HelloCanpool();

    setCentralWidget(hc);

    resize(300, 100);
}

2.1.2. 编译

编译后,输出的可执行程序如下:
在这里插入图片描述
看破

  • 看:可执行程序为什么在debug目录,而不是release目录?
    破:因为qtcreator构建时选的是debug模式,所以默认在debug目录
  • 看:可执行程序一般不是在bin目录吗?
    破:是的,一般是在bin目录,可以在pro文件中通过DESTDIR设置
  • 看:可执行程序名称为什么是hellocanpool,可以叫HelloCanpool吗?
    破:可以在pro文件中通过TARGET设置,如果没有设置,默认就是工程文件名
  • 看:为什么生成的是可执行程序exe,而不是库呢?
    破:可以在pro文件中通过TEMPLATE = app设置,如果没有设置,默认就是生成app。

备注:更多的配置和使用可以参考 qmake手册

2.1.3. 改进

将可执行程序改名为HelloCanpool,并输出到bin目录下:

  • hellocanpool.pro
QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

DESTDIR = bin
TARGET = HelloCanpool

CONFIG += c++11

在这里插入图片描述
这些就是一个可执行程序大致的开发内容了,之后可以不断的丰富这个可执行程序的功能。

2.1.4. 思考

一个可执行程序如果采用qmake构建方式,那么pro文件就是它的配置管理文件,通过DESTDIR、TARGET、TEMPLATE等完全可以管理好这个项目,这还需要什么工程管理模板吗?

思考一下:一个可执行程序可能存在哪些问题?

  • 随着软件功能的增加,这个可执行程序会越来越大,大好像也没啥问题。
  • 如果软件是个人开发的,也不用和别人协作,一个可执行程序也没啥问题。但有没有一种可能,一个人可能会开发多个软件,不同的软件之间可能有共用的功能,不过可以互相拷贝源文件,但文件数目较多呢,比如几十个,也来回拷贝吗?可以改为拷贝目录(模块)。
  • 如果软件是多人协作、分工开发,该怎么划分呢?一个可执行程序可以划分不同的类模块,不同的人负责不同的类模块,也可解决协作问题。
  • 有没有一种可能,开发的软件会提供给第三方做二次开发,此时,也把源代码拷贝给第三方吗?这对于开源软件来说,也不成问题。

把所谓的模块封装为库,提供开放接口的头文件,那么是不是可以更好的解决上面的问题呢?

2.2. 一个可执行程序、一个用户库

功能:将上一个可执行程序的窗口类HelloCanpool封装成hello库,提供给可执行程序使用。

2.2.1. 新建共享库

在这里插入图片描述
在这里插入图片描述
这里Type选择Shared Library,Qt module选择Widgets,类名和文件名保持不变。

主要代码如下

  • hello.pro
QT += widgets

TEMPLATE = lib
DEFINES += HELLO_LIBRARY

CONFIG += c++11

# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES +
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

canpool

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值