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

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

0 1.6K

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

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

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 变量。

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

project_dir/
--project.pro
--common.pri
--logic/
----logic.pro
----some logic files
--gui/
----gui.pro
----gui files
--build/
----build.pro
----main.cpp

project.pro 中的内容为:

TEMPLATE = subdirs
SUBDIRS  = logic \
           gui

# build 必须在最后一个
CONFIG  += ordered
SUBDIRS += build

common.pri 中的内容为:

# 通用设置,用于子目录 .pri 文件的引入
INCLUDEPATH += . ..
WARNINGS    += -Wall

TEMPLATE     = lib

UI_DIR       = uics
MOC_DIR      = mocs
OBJECTS_DIR  = objs

logic/logic.pro 中的内容为:

!include( ../common.pri ) {
    error( Couldn't find the common.pri file! )
}

HEADERS += logic.h
SOURCES += logic.cpp

gui/gui.pro 中的内容为:

!include( ../common.pri ) {
    error( Couldn't find the common.pri file! )
}

FORMS   += gui.ui
HEADERS += gui.h
SOURCES += gui.cpp

build/build.pro 中的内容为:

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

发表评论

关于我

devbean

devbean

豆子,生于山东,定居南京。毕业于山东大学软件工程专业。软件工程师,主要关注于 Qt、Angular 等界面技术。

主题 Salodad 由 PenciDesign 提供 | 静态文件存储由又拍云存储提供 | 苏ICP备13027999号-2