无法更改从C ++动态创建的QML组件的属性

时间:2014-11-25 19:14:49

标签: c++ qt qml qtquick2

在收集StackOverflow上几个帖子的各种信息后,我设法从一些Qt C ++代码动态创建我的QML组件。

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

任何人都有任何想法?

“x:xPos”“y:yPos”属性绑定可能有问题吗?

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);

1 个答案:

答案 0 :(得分:1)

好的,发帖之前没有努力。对不起!

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

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

技巧