Qt文档阅读笔记-Visual Parent的初步理解(获取QML中的根节点及其子结点)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq78442761/article/details/83341240

Qt有个继承树
在Widgets里面,可以通过setParent加进去!

搞QML的都知道QQmlContext继承于QObject
辣么问题在C++和QML交换的时候!
能不能通过QQmlContext的root结点,强转为QObject然后获取child呢?
答案是不能
如下伪代码:

void Widget::getDataInfo()
{
    QObject *pRoot = qobject_cast<QObject *>(ui->quickWidget->rootContext());
    Q_ASSERT(pRoot);
    qDebug()<<pRoot->children();
}


qml文件如下:

import QtQuick 2.0
import Data 1.0

Item {

    Text {
        id: myText
        text: qsTr("Hello world")
        color: "blue"
        font.pixelSize: 50
        font.family: "Times New Roman"
        anchors.centerIn: parent
    }

    Data {
        id: data
        text: myText.text
        size: myText.font.pixelSize
    }


}

运行截图如下:

然并卵

通过官方文档,知道了一个Visual Parent的概概念
可以通过QQuickItem获取children
然而:QQuickItem也继承了QObject

这样做,就可以做一些网友们所说的“歪门邪道”的事情了!
伪代码如下:

void Widget::getDataInfo()
{
    QQuickItem *pRoot = ui->quickWidget->rootObject();
    Q_ASSERT(pRoot);
    qDebug()<<pRoot->children();
    m_data =  qobject_cast<Data *>(pRoot->children()[1]);
    qDebug() << m_data->text();
}

qml文件如上面的qml;
运行截图

再随便放一张程序运行截图:

猜你喜欢

转载自blog.csdn.net/qq78442761/article/details/83341240
今日推荐