在QML应用程序

时间:2016-11-16 00:02:29

标签: qt plugins qml qtquick2

我有another project编译的QML插件(到.so)。我想在我自己的QML应用程序中重用它,而不是每次都重新构建它。我想复制.so,并且只需要很少的附加代码就可以写:

import QQuickMapboxGL 1.0

位于我的QML文件的顶部并使其正常工作。

我需要在QML项目中复制.so,如何将其添加到项目中以便QML运行时可以找到它?

我尝试过的事情:

  1. 在其中创建一个QQuickMapboxGL目录,其中包含libqmapboxgl.so
  2. 在该目录中创建一个qmldir文件,其中包含以下内容:

    plugin qmapboxgl
    
  3. 将以下内容添加到我的.pro文件中:

     
    INSTALL_DIR = $$PWD/../install
    target.path = $$INSTALL_DIR
    
    # Copy the QQuickMapboxGL folder to the install directory
    plugin.files = QQuickMapboxGL/*
    plugin.path  = $$INSTALL_DIR/QQuickMapboxGL
    
    INSTALLS += target plugin
    
  4. 添加make install构建步骤。

  5. 这个疯狂的hackery的结果是:

    plugin cannot be loaded for module "QQuickMapboxGL": Plugin verification data mismatch in '/my/build/QQuickMapboxGL/libqmapboxgl.so'
    

    我已经确认插件和我的应用程序都使用相同版本的g ++(g++-5 (Ubuntu 5.4.1-2ubuntu1~14.04) 5.4.1 20160904)和相同的Qt下载(5.7.0)进行编译。

1 个答案:

答案 0 :(得分:0)

主要问题是.so不是QML插件;没有类继承自QQmlExtensionPlugin或相关。它只是一个共享的代码库。

能够通过以下方式解决此问题:

  • 将MapboxGL的头文件添加到我的项目中
  • 在我的main.cpp中:
    • #include "3rdparty/mapbox-gl-native/platform/qt/include/qmapbox.hpp"
    • 致电QMapbox::registerTypes();(在main内)
  • libmapboxgl.so目录中复制libs(通过Mapbox' make / cmake构建)。
  • myproject.pro添加:LIBS += -L./libs -lqmapboxgl
  • 在我的QML代码import QQuickMapboxGL 1.0中,然后使用MapboxMap
  • libmapboxgl.so复制到LD_LIBRARY_PATH
  • 引用的某个位置