我有一个MyQuickItem
派生自QQuickItem
以下的类
// MyQuickItem.hpp
class MyQuickItem : public QQuickItem {
Q_OBJECT
public:
MyQuickItem();
virtual ~ MyQuickItem();
protected:
QSGNode* updatePaintNode(QSGNode *, UpdatePaintNodeData *) override;
};
以下是MyQuickItem.qml
.
import QtQuick 2.0
import MyQuickItem 1.0
Item {
MyQuickItem {
id: my_quick_item
objectName: "MyQuickItemObject"
visible: false
}
}
需要注意的是,以上所有 C++ 和 qml 代码都在一个单独的静态库中。图书馆里有qrc
一个MyQuickItem.qml
。这个库也可以访问QQmlApplicationEngine
应用程序的全局对象。
我的问题:如何从我的库中加载,以便它像应用程序中的其他 sMyQuickItem
一样在 QML 中注册?QQuickItem
main.qml
在应用程序加载 main.qml 之后调用的 C++ 方法中,我正在我的库中尝试以下方式:
MyQuickItem * myItem = new MyQuickItem();
myItem->setParent(m_qml_engine->parent());
myItem->setParentItem(qobject_cast<QQuickItem*>(m_qml_engine->parent()));
QQmlEngine::setObjectOwnership(myItem, QQmlEngine::JavaScriptOwnership);
myItem->setHeight(500); // But myItem is NULL here !!!
myItem->setHeight(500); // But myItem is NULL here !!!
首先,我不知道如何链接QUrl(QStringLiteral("qrc:/qml/MyQuickItem.qml"))
到myItem
指针。
其次,执行上述操作似乎无法MyQuickItem
正确加载,因为我没有接到updatePaintNode
我已覆盖的呼叫。我需要Qt/QML
窗口系统来调用我MyQuickItem::updatePaintNode
的,因为我在那里有重要的逻辑。
那么,我怎样才能MyQuickItem
从我的库中正确加载,以便它像其他QQuickItem
s 一样注册和更新?