QT Creator:如何为自定义小部件生成库和测试可执行文件

Posted

技术标签:

【中文标题】QT Creator:如何为自定义小部件生成库和测试可执行文件【英文标题】:QT Creator: How to generate the library and testing executable for a custom widget 【发布时间】:2015-03-24 10:36:30 【问题描述】:

有以下文件:

MyWidget
   |- MyWidget.cpp
   |- MyWidget.hpp
   |- MyWidget_UnitTest.cpp

我想立即生成以下文件:

    MyWidget.dll(或非 Windows 操作系统的等效项) MyWidget_UnitTest.exe(或非 Windows 操作系统的等效文件)

因此很容易测试小部件的错误,也可以在其他小部件或项目中获得结果。

我尝试操作 .pro 文件,但没有成功:

# ONLY TESTING UNIT
QT       += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = MyWidget_UnitTest
TEMPLATE = app
SOURCES +=\
    MyWidget.cpp \
    MyWidget_UnitTest.cpp
HEADERS  += \
    MyWidget.hpp
CONFIG += c++11 -Wall

#ONLY LIB
QT       += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = MyWidget_UnitTest
TEMPLATE = lib
SOURCES +=\
    MyWidget.cpp \
    MyWidget_UnitTest.cpp
HEADERS  += \
    MyWidget.hpp
CONFIG += c++11 -Wall
CONFIG += dll

我无法将两者合并到一个项目中。

可能会添加更多结果:静态与动态库等。

【问题讨论】:

这正是内部库的用途 - 请参阅 doc.qt.digia.com/qtcreator-2.3/…。它是创建库的子项目,是主项目(exe)的依赖项。 据我了解,该文档解释了如何包含库,而不是如何生成它们。 【参考方案1】:

使用 SUBDIRS 项目组织。

project_dir/
  src/
    your_dll/
      ... sources, headers ...
      your_dll.pro
    your_exe/
      ... sources, headers ...
      your_exe.pro
  project_dir.pro

project_dir.pro

TEMPLATE = subdirs
CONFIG += ordered

SUBDIRS += src/your_dll
SUBDIRS += src/your_exe

your_exe.depends = your_dll

your_exe.pro

TARGET = your_exe
TEMPLATE = app
QT += widgets
LIBS += -L$$YOUR_DLL_PATH -lyour_dll

etc...

your_dll.pro

TARGET = your_dll
TEMPLATE = lib
QT += widgets

etc...

现在当你构建时,DLL和EXE将被构建,并且EXE将链接到DLL。

【讨论】:

【参考方案2】:

使用不同的CONFIG 标志:

QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
SOURCES +=MyWidget.cpp
HEADERS += MyWidget.hpp
CONFIG += c++11 -Wall

testmode 
    # ONLY TESTING UNIT
    TARGET = MyWidget_UnitTest
    SOURCES += MyWidget_UnitTest.cpp
    TEMPLATE = app


libmode 
    #ONLY LIB
    TARGET = MyWidget
    TEMPLATE = lib
    CONFIG += dll

同时构建:

qmake "CONFIG+=libmode"
make
qmake "CONFIG+=testmode"
make

【讨论】:

同时构建两者? 致电qmake 两次以获取两者。

以上是关于QT Creator:如何为自定义小部件生成库和测试可执行文件的主要内容,如果未能解决你的问题,请参考以下文章

在 Qt Creator Designer 中用自定义模板小部件替换小部件

如何在 Qt Creator 的主窗口中添加自定义小部件

使用 Qt Creator 中设计的自定义小部件将页面动态添加到 QStackedWidget

我可以在 Qt Creator 推广的 pyqtgraph 小部件上替换 AxisItem 吗?

如何为 Qt GUI 小部件使用图像

Qt:如何将类连接到自定义 Qt 设计器小部件