版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
运行截图
再随便放一张程序运行截图: