在关于StackOverflow的几篇文章中收集了各种信息之后,我设法通过一些Qt C++代码动态创建了我的QML组件。

不幸的是,在创建之后,QQmlComponent::setProperty方法似乎没有任何作用。我可以看到红色矩形,但它没有达到我想要的x / y位置。

有人有什么主意吗?

也许“x:xPos”,“y:yPos”属性绑定(bind)有问题?

QML代码:

import QtQuick 2.2

Rectangle {
  property int xPos: 0;
  property int yPos: 0;

  width: 100
  height: 100
  x: xPos
  y: yPos

  color: "red";
  radius: 10
}

C++代码(m_view是QQuickView):
QQuickItem *twoDView = qobject_cast<QQuickItem*>(m_view->rootObject()->findChild<QObject *>("myView"));
QQmlComponent myComponent(m_view->engine(), QUrl("qrc:/myItem.qml"));
QQuickItem *newView = qobject_cast<QQuickItem*>(myComponent.create());
newView->setParentItem(twoDView);
myComponent.setProperty("xPos", x);
myComponent.setProperty("yPos", y);

最佳答案

好的,发布前没有努力。不好意思!

解决方案是调用newView的setProperty而不是myComponent!

newView->setProperty("xPos", x);
newView->setProperty("yPos", y);

绝招

关于c++ - 无法更改从C++动态创建的QML组件的属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27134820/

10-11 20:54