我在一个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)。