如何在Qt App项目中制作Qt插件项目

时间:2019-07-18 10:37:45

标签: c++ qt qml

运行应用程序时,QtCreator总是显示这样的错误

QQmlApplicationEngine failed to load component
qrc:/main.qml:3 module "SampleModules" is not installed

我尝试过 -到处寻找解决方案 -将qmldir文件移动到应用程序项目或二进制文件夹 -更改插件 -通过多种方式更新.pro文件(甚至将链接添加到插件的资源文件中)

我的完整源代码在这里,我将其放置在github上,以供所有人查看我的代码的完整视图,只是一个快速示例。     https://github.com/chaunnt/QtWithQMLPluginProjects

这里有一些细节 我的project.pro

TEMPLATE = subdirs

    SUBDIRS += \
        SampleModules \
        SampleApp


    SampleApp.depends = SampleModules

我的module.pro

TEMPLATE = lib
TARGET = SampleModules
QT += qml quick
CONFIG += plugin c++11

TARGET = $$qtLibraryTarget($$TARGET)
uri = SampleModules
version = 1.0
# Input
SOURCES +=         samplemodules_plugin.cpp         samplemodules.cpp

HEADERS +=         samplemodules_plugin.h         samplemodules.h

DISTFILES = qmldir

!equals(_PRO_FILE_PWD_, $$OUT_PWD) {
    copy_qmldir.target = $$OUT_PWD/qmldir
    copy_qmldir.depends = $$_PRO_FILE_PWD_/qmldir
    copy_qmldir.commands = $(COPY_FILE) "$$replace(copy_qmldir.depends, /, $$QMAKE_DIR_SEP)"     "$$replace(copy_qmldir.target, /, $$QMAKE_DIR_SEP)"
    QMAKE_EXTRA_TARGETS += copy_qmldir
    PRE_TARGETDEPS += $$copy_qmldir.target
}

qmldir.files = qmldir
unix {
    installPath = $$[QT_INSTALL_QML]/$$replace(uri, \., /)
    qmldir.path = $$installPath
    target.path = $$installPath
    INSTALLS += target qmldir
}

我的app.pro

QT += quick
CONFIG += c++11

SOURCES += \
    main.cpp

RESOURCES += qml.qrc

QML_IMPORT_PATH =

QML_DESIGNER_IMPORT_PATH =

qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

我希望创建一个Qt插件项目,该项目可以为我的Qt App项目注册C ++,QML和Singleton QML。

我的qmldir文件

module SampleModules
plugin SampleModules
classname SampleModulesPlugin
typeinfo plugins.qmltypes

1 个答案:

答案 0 :(得分:0)

我自己修复了。 将此行添加到main.cpp

engine.addImportPath("..");

根本原因是因为SampleApp二进制文件在输出目录中找不到QML文件夹。

正在搜索文件夹

"Output/SampleApp/SampleModule"

但是我们将项目输出为

"Output/SampleApp"
"Output/SampleModule"

注意:在QtCreator的“构建和运行”环境变量中添加环境变量QML_IMPORT_TRACE = 1,以获取加载了哪些插件以及出了什么问题。

我还在模板项目的github上推送了固定补丁