我正在开玩笑的一个非常简单的QML样本应该最终成为某种棋盘,但出于某种原因,我无法在运行时正确添加单元格。使用C ++类(BasicCell
扩展QQuickItem
)定义单元格,并使用Qml(cell.qml
)进行样式设置:
BasicCell {
width: 32
height: 32
Rectangle {
anchors.fill : parent
color : "green"
}
}
我使用QQmlComponent来构造这个"样式"的实例。 BasicCell在运行时:
QQmlComponent cellComponent(qmlEngine(), cellUrl, this);
// Make sure we could actually load that QML component
if (cellComponent.status() != QQmlComponent::Ready)
{
std::cerr << "Error loading cell.qml:" << std::endl;
for (const auto& err : cellComponent.errors())
{
std::cerr << " " << err.toString().toStdString() << std::endl;
}
}
for (int x = 0; x < mNumTiles.width(); ++x)
{
for (int y = 0; y < mNumTiles.height(); y++)
{
BasicCell* cell = qobject_cast<BasicCell*>(cellComponent.create());
cell->setParent(this);
cell->setSize(QSize(tileSize(), tileSize()));
cell->setGridPos(QPoint(x, y));
childItems().append(cell);
mCells.insert(cell->gridPos(), cell);
}
}
当使用QML调试器时,我可以看到我最终得到了&#34;正确的&#34;层次结构:
Game
BasicCell
Rectangle
BasicCell
Rectangle
...
但我无法看到一件事......我进行了双重和三重检查:所有这些矩形和基本单元都设置了合适的尺寸。
越来越沮丧,我终于从cell.qml
复制了代码并将其作为直接子项粘贴到Board.qml中。令我惊讶的是,这使得单元格完全符合我的预期。
我在使用QQmlComponent
时遇到的问题与QML中的这种情况有什么不同?
Game
{
// Should be created at runtime using QQmlComponent
BasicCell {
width: 32
height: 32
Rectangle {
anchors.fill: parent
color : "green"
}
gridPos: "0,0"
}
}
答案 0 :(得分:1)
cell->setParent(this);
应该是
cell->setParentItem(this);
可视父级的概念与QObject的概念不同 家长。项目的可视父母可能不一定与其相同 对象父母。有关更多信息,请参阅概念 - Qt Quick中的Visual Parent 的信息。
取自: