如何将Qml插件库导入另一个项目?

时间:2019-01-03 21:48:35

标签: qt qml qmake

我在一个lib中有2个qml文件,我想将这些文件导出到另一个项目,但是无法导入到我的QuickQmlTest项目中。我想使用QuickQmlTest项目中QmlPlugin lib中的qml文件。我还需要执行其他任何步骤吗?我有一个文件夹结构

  QMLProject  
  |-- QmlPlugin -(it is lib)
      |--QML  
         |--CustomButton.qml
         |-- CustomPolygon.qml
  |-- QuickQmlTest - (app)   

我的QmPlugins.pro看起来像这样

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

TARGET = $$qtLibraryTarget($$TARGET)


HEADERS += \
    MyPlugin.h

DISTFILES = qmldir \  
    CustomButton.qml \
    CustomPolygon.qml
DESTDIR = $$PWD/lib

然后我使用

将生成的dll链接到QuickQmlTest.pro。
LIBS += -L$$PWD/../QmlPlugin/lib -lQmlPlugin  
INCLUDEPATH += $$PWD/../QmlPlugin

MyPlugin.h

    #include <QQmlExtensionPlugin>
    #include <QtQml/qqml.h>
    class MyItemModel: public QObject
    {
       Q_OBJECT
       Q_PROPERTY(qreal roundingRadius READ roundingRadius WRITE setRoundingRadius)
        public:
        void setRoundingRadius(const qreal rounding)
        {
            roundingRadius_ = rounding;
        }
         qreal roundingRadius() const
         {
             return roundingRadius_;
         }
         private:
         qreal roundingRadius_{8.0};
    };
    class MyPlugin : public QQmlExtensionPlugin
    {
        Q_OBJECT
        Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid)
        public:
        void registerTypes(const char* uri)override
        {
            Q_ASSERT(uri == QLatin1String("Components"));
            qmlRegisterType<MyItemModel>(uri, 1, 0, "MyItemModel");
        }
    };

我在qmldir中拥有

module Components
Components 1.0 CustomButton.qml CustomPolygon.qml
plugin QmlPlugin

在QuickQmlTest(应用程序)中
我想在main.qml中使用CustomButton.qml和CustomPolygon.qml
因此,我在QuickQmlTest应用程序中的main.qml

import QtQuick 2.9
import QtQuick.Window 2.2
import QtQuick.Controls 1.4
import Components 1.0 //To import the dll from lib 
Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")
    CustomPolygon
    {
     width:60
     height:30  
    }
    CustomButton
    {
     width:60
     height:30  
    }
}  

我也想在快速设计模式下查看我无法实现的自定义qml类型(CustomButton和CustomPolygon)。

0 个答案:

没有答案