欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

QML中如何查找嵌套的qml对象,然后调用QML的方法

程序员文章站 2022-03-09 16:15:13
...

一、前言

        我们一般开发QML界面,不会将整界面写在一个QML文件中,会将一个界面拆分成多个QML文件,主界面一般使用小写开头的名字(否则可能加载不出来),本文介绍使用QQuickWidget加载QML以后,多个QML文件嵌套以后,如何在QT中找到单个的QML对象,然后进行方法的调用

void qtInvokeQml()\
{
    m_quickView  = new QQuickWidget(/*父类自己给*/)
    
    // 1.只有一个根qml的方法调用
    QMetaObject::invokeMethod(m_quickView->rootObject(),
                              "qmlFunction", 
                              Q_ARG(QVariant, str));
    
    // 2.rectangleObj是qml中设定的objectName,和id类似
    // 这种写法适合于嵌套的QML的查找
    QQuickItem *item = m_quickView->rootObject()->
            findChild<QQuickItem*>("rectangleObj");
    if (item == nullptr) {
        return;
    }

    // "qmlFunction" 是qml中的方法
    // str是这个方法的参数,类型必须为QVariant
    QMetaObject::invokeMethod(item,
                              "qmlFunction",
                              Q_ARG(QVariant, str));
}