Qml:GridView.onReloaded信号

时间:2017-08-22 14:42:28

标签: gridview qml qt5

我在c ++代码中有QAbstractListModel,并通过

将它连接到Buton的qml GridView
QQmlApplicationEngine engine;
QQmlContext* context = engine.rootContext();
context->setContextProperty("keyboardModel", _keyboardModel);

主要目标是在c ++代码中获取按钮的全局坐标。为此,我找到了具有QQuickItem::childItems()函数的按钮,并获得了mapToGlobal()的最终坐标。

现在,当我改变c ++模型时,qml GridView也发生了变化。但是,当层次化的QQuickItem树完全刷新时(我需要正确工作QQuickItem::childItems()

GridView的信号onAdd,当新模型具有相同数量的元素时,删除不起作用。 GridView的信号onModelChanged仅在我连接另一个模型时触发,而不是在我更改此模型时触发。

当分层的QQuickItem树完全刷新时,是否有任何识别信号?或者还有其他方法可以动态获取Qml的对象全局坐标?

1 个答案:

答案 0 :(得分:0)

重建GridView时没有信号

但是GridView有一个属性moving和信号movementEnded

我希望Button中的每个GridView都与此信号相关联。进一步处理Component.onCompleted的{​​{1}}。 <{1}}(重新)创建时会触发此信号。

现在在某个C ++对象中公开Button,它将所需的信息作为参数。比方说,它的签名是

Button

现在在Q_INVOCABLE你有:

void reportPosition(QString name, int x, int y)

通过这个我们实现了:

  • C ++在移动结束时知道所有创建的按钮的位置
  • C ++在创建时了解所有新创建的按钮的位置(如果您不想要新创建的按钮的位置,则在Button保护它们时)
  • 您不需要从C ++查询QML,但需要QML报告到C ++
  

这只是这个想法的概述。我现在没有办法测试它,所以可能会有错误。