Qt 应用程序的一种插件化设计思路

xiaoxiao2021-02-28  141

以下内用转自

https://www.devbean.net/2012/01/a-qt-pro-design-method/

Qt 框架内置了插件机制,这给我们的模块化设计提供了一种思路,就是利用 Qt 的插件机制来实现模块化设计。例如,我们可以将主程序、GUI、业务逻辑做成三个模块——所谓模块,我们可以从表现形式上理解成就是一个 .dll 文件。本文所要阐述的重点,就是如何针对这种设计编写 .pro 文件。

假设我们的项目文件结构如下所示:

1 2 3 4 5 6 7 8 9 project_dir / -- project . pro -- main . cpp -- logic / -- -- logic . pro -- -- some logic files -- gui / -- -- gui . pro -- -- gui files

显而易见,我们应该将 .pro 文件的 TEMPLATE 设置为 subdirs,而 SUBDIRS 则是 gui、logic 两个目录。但是,将 TEMPLATE 设置为 subdirs 有一个问题:会将各个 .pro 文件的 TEMPLPATE 或者 TARGET 变量设置得很乱。SUBDIRS 最适合于仅仅指定子目录,因此,不建议在 TEMPLATE = SUBDIRS 的 .pro 文件中同时设置 SOURCES 变量。

我们重新调整下目录结构:

1 2 3 4 5 6 7 8 9 10 11 12 project_dir / -- project . pro -- common . pri -- logic / -- -- logic . pro -- -- some logic files -- gui / -- -- gui . pro -- -- gui files -- build / -- -- build . pro -- -- main . cpp

project.pro 中的内容为:

1 2 3 4 5 6 7 TEMPLATE = subdirs SUBDIRS    = logic \            gui   # build 必须在最后一个 CONFIG    += ordered SUBDIRS += build

common.pri 中的内容为:

1 2 3 4 5 6 7 8 9 # 通用设置,用于子目录 .pri 文件的引入 INCLUDEPATH += . . . WARNINGS      += - Wall   TEMPLATE      = lib   UI_DIR        = uics MOC_DIR        = mocs OBJECTS_DIR    = objs

logic/logic.pro 中的内容为:

1 2 3 4 5 6 ! include ( . . / common . pri ) {      error ( Couldn' t find the common . pri file ! ) }   HEADERS += logic . h SOURCES += logic . cpp

gui/gui.pro 中的内容为:

1 2 3 4 5 6 7 ! include ( . . / common . pri ) {      error ( Couldn' t find the common . pri file ! ) }   FORMS    += gui . ui HEADERS += gui . h SOURCES += gui . cpp

build/build.pro 中的内容为:

1 2 3 4 5 6 7 8 TEMPLATE = app   SOURCES += main . cpp   LIBS      += - L . . / logic - L . . / gui - llogic - lgui   # 设置生成的主应用程序文件的目录 TARGET    = . . / project

此时,我们直接编译 project.pro 项目文件,就可以得到一个分开编译好的程序文件。

这里仅提供一种设计思路,供大家思考。本文思路出自 http://stackoverflow.com/questions/1417776/how-to-use-qmakes-subdirs-template

转载请注明原文地址: https://www.6miu.com/read-28833.html

最新回复(0)