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 +
### 关于 `qtcanpool` 的使用方法 #### 1. 安装与配置 为了使用 `qtcanpool`,首先需要安装依赖项并设置开发环境。由于该项目是一个 Qt 小部件框架,因此建议先确保已正确安装了 Qt 开发工具链[^1]。 ```bash # 假设已经安装好Qt Creator和必要的编译器 git clone https://gitcode.com/gh_mirrors/qt/qtcanpool cd qtcanpool qmake make ``` #### 2. 创建 CAN 总线通信应用实例 下面展示如何创建一个简单的应用程序来利用 `qtcanpool` 进行 CAN 总线数据收发操作: ```cpp #include <QCoreApplication> #include "qcandevice.h" #include "qcanbusdevice.h" int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); // 初始化CAN设备管理类 QCANDevice canDevice; // 打开指定类型的CAN接口(此处假设为socketcan) if (!canDevice.connectDevice("socketcan", "vcan0")) { qDebug() << "Failed to connect"; return -1; } // 发送一条测试消息到总线上 QByteArray data = {0x01, 0x02}; QCanBusFrame frame(QCanBusFrame::createDataFrame(0x7FF, data)); canDevice.writeFrame(frame); QObject::connect(&canDevice, &QCANDevice::framesReceived, [&]() { while (auto f = canDevice.readFrame()) { qDebug() << "Received Frame:" << f.toString(); } }); return a.exec(); } ``` 这段代码展示了基本的连接、发送以及接收 CAN 报文的过程。 #### 3. 高级特性集成 对于更复杂的应用场景,比如与其他 GUI 组件交互时,则可以考虑引入其他辅助库如 [QDarkStyleSheet](https://github.com/ColinDuquesnoy/QDarkStyleSheet)[^2] 来美化界面风格;或者采用类似于 `FancyTabBar` 的自定义控件增强用户体验[^3]。
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

canpool

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

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

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

打赏作者

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

抵扣说明:

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

余额充值