【qml】在C++中获取qml中的对象

直接上代码:

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);
 
    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
    
    QObject *pRoot = engine.rootObjects().first();
    QObject *pButton = pRoot->findChild<QObject *>("testButton");
    if( pButton )
    {
           。。。;
    }

    return app.exec();
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在 Qt ,可以通过在 QML 使用 `Qt.createQmlObject()` 或者 `Qt.createComponent()` 创建一个 C++ 对象,然后在 QML 调用该对象的方法或者访问其属性。 具体步骤如下: 1. 在 C++ 定义一个 QObject 的子类,并在其声明 Q_INVOKABLE 的方法或者 Q_PROPERTY 的属性。 ```cpp // MyObject.h #ifndef MYOBJECT_H #define MYOBJECT_H #include <QObject> class MyObject : public QObject { Q_OBJECT public: explicit MyObject(QObject *parent = nullptr); Q_INVOKABLE void myMethod(QString str); Q_PROPERTY(QString myProperty READ myProperty WRITE setMyProperty NOTIFY myPropertyChanged) void setMyProperty(const QString &str); QString myProperty() const; signals: void mySignal(); void myPropertyChanged(); }; #endif // MYOBJECT_H ``` ```cpp // MyObject.cpp #include "MyObject.h" MyObject::MyObject(QObject *parent) : QObject(parent) { } void MyObject::myMethod(QString str) { qDebug() << "myMethod called with arg" << str; } void MyObject::setMyProperty(const QString &str) { if (m_property != str) { m_property = str; emit myPropertyChanged(); } } QString MyObject::myProperty() const { return m_property; } ``` 2. 在 main.cpp 将该对象注册到 QML ,以便在 QML 访问。 ```cpp // main.cpp #include <QGuiApplication> #include <QQmlApplicationEngine> #include "MyObject.h" int main(int argc, char *argv[]) { QGuiApplication app(argc, argv); QQmlApplicationEngine engine; qmlRegisterType<MyObject>("com.mycompany.myobject", 1, 0, "MyObject"); engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); return app.exec(); } ``` 3. 在 QML 使用 `Qt.createComponent()` 或者 `Qt.createQmlObject()` 创建该对象,并调用其方法或者访问其属性。 ```qml // main.qml import QtQuick 2.0 import com.mycompany.myobject 1.0 Rectangle { width: 400 height: 400 MyObject { id: myObject myProperty: "Hello, World!" Component.onCompleted: { myObject.myMethod("Hello, World!"); console.log(myObject.myProperty); } } } ``` 在上述代码,我们使用 `MyObject` 类创建了一个名为 `myObject` 的对象,并调用了它的 `myMethod` 方法和 `myProperty` 属性。 需要注意的是,使用 `Qt.createComponent()` 或者 `Qt.createQmlObject()` 创建对象时,必须指定该对象的父对象,否则该对象将无法正常工作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

草丛中的蝈蝈

您的鼓励是我最大的动力....

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值