QT实现多个项目管理

1 新建项目

qt在新建项目时选择“其他项目-子目录项目”创建拥有子项目模式的QT项目

2添加子项目

有两种选择,一个app主项目+多个lib子项目,或者全是app(可执行文件模式)子项目

在这里插入图片描述
添加app子项目方法:
在这里插入图片描述

添加lib子项目方法:
在这里插入图片描述

2.1 一个主app项目+多个子lib项目

假设新建项目TEST,主app项目MainPro,子lib项目subPro1subPro2,整体项目文件格式为
在这里插入图片描述

利用SUBDIRS实现多项目管理,TEST.pro文件中为

TEMPLATE = subdirs
SUBDIRS +=\
	subPro1 \
	subPro2 \
	MainPro 

#CONFIG选项要求各子项目按顺序编译,子目录的编译顺序在SUBDIRS 中指明,写这句话的目的是将所有的子项目构建
CONFIG += ordered

只有主app项目MainPro中有一个main.cpp,在MainPro.pro文件中有

TEMPLATE = app

表示该项目为一个app项目,构建生成可执行文件(.exe)
在lib子项目中,subPro1.pro中有

TEMPLATE = lib

表示该项目为一个lib项目,构建生成库文件(.dll和.a)。
可以在主项目中编写代码来调用子项目,具体方法参照

https://blog.csdn.net/chen1231985111/article/details/126251292

2.2 一个主app项目+多个子app项目

这里的每一个app项目都有自己的main.cpp,具体格式类似为下图,在这种有多个应用程序的项目中(有多个main.cpp,构建后有多个.exe),默认执行先添加的子项目(只能执行一个.exe)
在这里插入图片描述
利用SUBDIRS实现多项目管理,TEST2.pro文件中为

TEMPLATE = subdirs
SUBDIRS +=\
	mainApp \
	subApp1 \

mainApp.prosubApp1.pro中均有

TEMPLATE = app

表示两个均为可执行文件,可以单独运行mainAppsubApp1
在这里插入图片描述
因为有两个app,运行时默认执行先添加的主项目mainApp,

2.2.1 利用QProcess在主项目mainApp中调用子项目subApp1(AI回答)

可以在主项目中利用QProcess来调用子项目(这里假设子项目是可执行的应用程序),您需要确保子项目已经被构建成可执行文件,并且您知道这些可执行文件的路径。然后,您可以在主项目的代码中创建QProcess对象,并使用这些对象的start()方法来启动子项目的可执行文件。

以下是一个基本的示例,展示了如何在Qt的主项目中使用QProcess来启动两个子项目(app1和app2)的可执行文件:

确保子项目已构建:首先,确保您的子项目(app1和app2)已经被成功构建,并且生成了可执行文件。这些可执行文件通常位于Qt Creator的构建目录中,路径可能类似于build-app1-Desktop_Qt_XX_YY_ZZ_64bit-Debug/app1.exe(对于Windows)或相应的路径(对于macOS或Linux)。
修改主项目的代码:在主项目的某个合适的位置(例如,一个按钮的槽函数中),创建QProcess对象并启动子项目的可执行文件。

// 假设这是MainWindow类中的一个槽函数,用于启动子项目  
void MainWindow::startSubprojects()  
{  
    // 假设可执行文件位于与主项目构建输出相同的目录结构中  
    // 注意:这里的路径是示例性的,您需要根据实际情况进行调整  
    QString executablePathApp1 = QCoreApplication::applicationDirPath() + "/../subprojects/build-app1-Desktop_Qt_XX_YY_ZZ_64bit-Debug/app1.exe";  
    QString executablePathApp2 = QCoreApplication::applicationDirPath() + "/../subprojects/build-app2-Desktop_Qt_XX_YY_ZZ_64bit-Debug/app2.exe";  
  
    // 创建QProcess对象  
    QProcess *process1 = new QProcess(this); // 假设this是指向MainWindow的指针  
    QProcess *process2 = new QProcess(this);  
  
    // 启动子项目  
    process1->start(executablePathApp1);  
    process2->start(executablePathApp2);  
  
    // 可以连接QProcess的信号来接收子进程的输出或状态变化  
    connect(process1, &QProcess::readyReadStandardOutput, this, &MainWindow::onReadyReadStandardOutput);  
    connect(process2, &QProcess::finished, this, &MainWindow::onProcessFinished);  
  
    // ... 其他需要的连接和逻辑  
}  
  
// 槽函数来处理子进程的输出(示例)  
void MainWindow::onReadyReadStandardOutput()  
{  
    QProcess *process = qobject_cast<QProcess *>(sender());  
    if (process) {  
        QByteArray output = process->readAllStandardOutput();  
        // 处理输出...  
    }  
}  
  
// 槽函数来处理子进程完成的事件(示例)  
void MainWindow::onProcessFinished(int exitCode, QProcess::ExitStatus exitStatus)  
{  
    QProcess *process = qobject_cast<QProcess *>(sender());  
    if (process) {  
        qDebug() << "Process" << process->program() << "finished with exit code" << exitCode << "and status" << exitStatus;  
        // 清理资源或执行其他逻辑...  
    }  
}

注意:

上面的路径QCoreApplication::applicationDirPath() + "/../subprojects/..."是示例性的,并且可能需要根据您的实际项目结构和构建设置进行调整。
QProcess对象通常不会立即启动子进程,而是异步地执行。因此,您可能需要连接QProcess的信号(如started()、finished()、readyReadStandardOutput()等)来监控子进程的状态和输出。
在实际应用中,您可能还需要处理错误情况,例如子进程无法启动或崩溃。这可以通过连接QProcess的errorOccurred()信号来实现。
如果您想要在主项目中与这些子进程进行更复杂的交互(例如,发送命令或数据),您可能需要考虑使用进程间通信(IPC)机制,如命名管道、套接字、共享内存等。但是,请注意,这通常比简单地启动和监控子进程要复杂得多。

3 路径问题

对于总项目中多个子目录项目构建生成的.exe或.dll或.a文件,可以通过在所有子目录项目的.pro中添加语句将构建生成的文件放到同一个文件夹下。
以TEST项目为例,项目文件结构为
在这里插入图片描述
在MainPro.pro、subPro1.pro、subPro2.pro文件中都添加

DESTDIR = ../TEST_bulid

这里的含义是将工程构建生成的可执行文件或库文件都放到自己新建的TEST_bulid文件夹中方便管理,TEST_bulid文件夹在TEST项目build文件夹的下一级中,即与子项目文件夹同级。

.pro工程的配置

选项说明
TEMPLATE模板变量告诉qmake为这个应用程序生成哪种makefile
CONFIG指定编译器选项和项目配置,值由qmake内部识别并具有特殊意义。
DEFINESqmake添加这个变量的值作为编译器C预处理器宏(-D选项)。
INCLUDEPATH指定编译项目时应该被搜索的#include目录。
DEPENDPATH指定程序编译时依赖的相关路径。
DESTDIR指定在何处放置目标文件。
TARGET指定目标文件的名称。默认情况下包含的项目文件的基本名称。
OUT_PWD指定构建目录。
MOC_DIR指定来自moc的所有中间文件放置的目录(含Q_OBJECT宏的头文件转换成标准.h文件的存放目录)。
OBJECTS_DIR指定所有中间文件.o(.obj)放置的目录。
RCC_DIR指定Qt资源编译器输出文件的目录(.qrc文件转换成qrc_*.h文件的存放目录)。
LIBS指定链接到项目中的库列表。-L后是库文件的目录,-l后是具体的库的名字(后缀不用加)。例如:LIBS += -L$$PWD/../../../ThirdLib/winapi -lWSock32
RC_ICONS仅适用于Windows,指定的图标应该包含在一个生成的.rc文件里。如果RC_FILE 和RES_FILE变量都没有设置这才可利用。
TRANSLATIONS指定包含用户界面翻译文本的翻译(.ts)文件列表。

TEMPLATE配置项

选项说明
app创建一个用于构建应用程序的Makefile(默认)。
lib创建一个用于构建库的Makefile。
subdirs创建一个用于构建目标子目录的Makefile,子目录使用SUBDIRS变量指定。
aux创建一个不建任何东西的Makefile。如果没有编译器需要被调用来创建目标,比如你的项目使用解释型语言写的,使用此功能。注:此模板类型只能用于Makefile-based生成器。特别是,它不会工作在vcxproj和Xcode生成器。
vcapp仅适用于Windows。创建一个Visual Studio应用程序项目。
vclib仅适用于Windows。创建一个Visual Studio库项目。

CONFIG 配置项

选项说明
release项目以release模式构建。如果也指定了debug,那么最后一个生效。
debug项目以debug模式构建。
debug_and_release项目准备以debug和release两种模式构建。
debug_and_release_target此选项默认设置。如果也指定了debug_and_release,最终的debug和release构建在不同的目录。
build_all如果指定了debug_and_release,默认情况下,该项目会构建为debug和release模式。
autogen_precompile_source自动生成一个.cpp文件,包含在.pro中指定的预编译头文件。
ordered使用subdirs模板时,此选项指定应该按照目录列表的顺序处理它们。
precompile_header可以在项目中使用预编译头文件的支持。
warn_on编译器应该输出尽可能多的警告。如果也指定了warn_off,最后一个生效。
warn_off编译器应该输出尽可能少的警告。
exceptions启用异常支持。默认设置。
exceptions_off禁用异常支持。
rtti启用RTTI支持。默认情况下,使用编译器默认。
rtti_off禁用RTTI支持。默认情况下,使用编译器默认。
stl启用STL支持。默认情况下,使用编译器默认。
stl_off禁用STL支持。默认情况下,使用编译器默认。
thread启用线程支持。当CONFIG包括qt时启用,这是缺省设置。
c++11启用c++11支持。如果编译器不支持c++11这个选项,没有影响。默认情况下,支持是禁用的。
c++14启用c++14支持。如果编译器不支持c++14这个选项,没有影响。默认情况下,支持是禁用的。

原文链接:https://blog.csdn.net/qq_44721831/article/details/128374163

具体参照链接:

http://www.360doc.com/content/24/0514/09/65283686_1123250789.shtml
https://blog.csdn.net/qq_44721831/article/details/128374163?spm=1001.2014.3001.5506

  • 30
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智能交通项目计划书是针对现代智能化交通系统的设计与实施提出的蓝图。Qt作为一种跨平台的应用程序开发框架,可以帮助我们实现智能交通项目的开发。下面是一个关于Qt实现智能交通项目计划书的简要介绍。 首先,我们需要通过Qt框架创建各种图形用户界面(GUI),以实现用户与智能交通系统的交互。Qt提供了丰富的UI组件和工具,可以帮助我们设计各种交通系统相关的界面,如交通信号灯调度界面、车辆监控界面、交通路况查询界面等。通过Qt的可视化设计工具,我们可以快速创建和布局界面,提高交通系统的易用性和可视化效果。 其次,Qt库提供了强大的网络编程功能,可以帮助我们实现智能交通系统的网络通信。我们可以利用Qt的网络模块来实现车辆与交通信号灯、交通监控中心之间的数据传输。通过Qt的网络编程接口,我们可以实现数据的实时传输、异步通信和网络连接的管理,确保交通系统的高效运行和数据的及时处理。 此外,Qt还提供了独立于平台的文件系统操作功能,可以用于实现交通数据的读取和写入。我们可以利用Qt的文件操作接口来读取和处理交通监控设备采集的数据,如车辆经纬度、速度等信息。同时,也可以利用Qt的文件IO接口将处理后的交通数据存储到特定的文件中,以备后续分析和利用。 最后,Qt还支持多线程编程,可以实现并行处理任务,提高智能交通系统的运行效率。我们可以利用多线程技术,将系统关键处理逻辑放在独立的线程中运行,提升系统的并发性和响应速度。 综上所述,Qt作为一种强大的开发框架,可以有效地实现智能交通项目计划书中所提到的各项功能。通过利用Qt的GUI、网络编程、文件操作和多线程等特性,我们可以实现一个功能齐全、高效运行的智能交通系统。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值