C++创建QML对象

C++创建QML对象

1、简介

通过C++创建qml需要使用两个类QQmlEngine和QQmlComponent

2、代码
cpp
#include <QQmlComponent>
#include <QQmlEngine>
#include <QQuickWindow>
#include <QDebug>

int main(int argc, char *argv[])
{
	QGuiApplication app(argc, argv);

	QQmlEngine qmlEngine;
	QQmlComponent* component = new QQmlComponent(&qmlEngine, "qrc:/main.qml");

	// qml编写有问题会创建失败,可以使用errorString打印失败信息
	QObject* pMainObj = component->create();
	qDebug() << component->errorString();
	
	// 在此将QObject转为QQuickWindow是因为qml文件顶层是Window,如果是Item,则是QQuickItem *
	QQuickWindow* pQuickWindow = dynamic_cast<QQuickWindow *>(pMainObj);
	pQuickWindow->show();
	return app.exec();
}

qml
import QtQuick 2.12
import QtQuick.Window 2.12

Window {
    width: 640
    height: 480
    visible: true
    title: qsTr("Hello World")
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
QML 中弱引用 C++ 对象的方法取决于 C++ 对象的类型。如果 C++ 对象是 `QObject` 的子类,可以使用 `QQmlEngine::setObjectOwnership` 函数将 C++ 对象的所有权设置为 `QQmlEngine::CppOwnership`。这样,在 QML 中使用这个 C++ 对象时,QML 引擎会创建一个弱引用,而不是拥有它。 以下是一个使用 `setObjectOwnership` 函数弱引用 C++ 对象的例子: ``` #include <QObject> #include <QQmlEngine> class MyObject : public QObject { Q_OBJECT // ... }; int main(int argc, char *argv[]) { QGuiApplication app(argc, argv); MyObject *cObj = new MyObject(); // 创建 C++ 对象 QQmlEngine engine; engine.setObjectOwnership(cObj, QQmlEngine::CppOwnership); // 设置 C++ 对象的所有权 QQmlComponent component(&engine, QUrl("qrc:/main.qml")); QObject *qmlObj = component.create(); // 创建 QML 对象 QQmlEngine::setObjectOwnership(qmlObj, QQmlEngine::JavaScriptOwnership); // 设置 QML 对象的所有权 // ... return app.exec(); } ``` 在这个例子中,我们创建了一个 `MyObject` 类型的 C++ 对象,然后使用 `setObjectOwnership` 函数将它的所有权设置为 `QQmlEngine::CppOwnership`。在创建 QML 对象时,我们使用 `setObjectOwnership` 函数将它的所有权设置为 `QQmlEngine::JavaScriptOwnership`,这意味着 QML 引擎不会拥有这个对象。 如果 C++ 对象不是 `QObject` 的子类,或者我们想要更细粒度地控制对象的生命周期,可以使用 `QSharedPointer` 或 `std::shared_ptr` 等智能指针来管理对象的生命周期。在这种情况下,我们需要手动将 C++ 对象转换为 `QObject` 类型,并手动创建和释放智能指针。 总之,在 QML 中弱引用 C++ 对象需要根据具体情况选择不同的方法。使用 `setObjectOwnership` 函数或智能指针等方法可以帮助我们正确地管理 C++ 对象的生命周期。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值