【发布时间】:2018-04-05 08:36:34
【问题描述】:
我有一个 C++ 中的 QQuickItem,它在 QML 应用程序中实例化。如果我的 QQuickItem 的 width 属性发生变化,我想在 c++ 端触发一个自定义函数。
在 QML 中我会做 onWidthChanged: { my code}。如何在 c++ 端做到这一点?
【问题讨论】:
-
我编辑了标题,因为混合窗口和项目有点令人困惑,而您似乎只对项目的大小变化感兴趣。
我有一个 C++ 中的 QQuickItem,它在 QML 应用程序中实例化。如果我的 QQuickItem 的 width 属性发生变化,我想在 c++ 端触发一个自定义函数。
在 QML 中我会做 onWidthChanged: { my code}。如何在 c++ 端做到这一点?
【问题讨论】:
如果您想响应自定义 QQuickItem 中的大小更改,请重新实现 geometryChanged() 函数。这样做的好处是不会为每个项目创建额外的 signal-slot connections,如果您要连接到 widthChanged()/heightChanged() 信号,这将是必要的。
Here 是在 Qt Quick Controls 2 中重新实现的一个示例。
【讨论】:
width 是具有widthChanged 信号的qproperty,因此您可以将该信号连接到某个插槽。
class FooItem : public QQuickItem
{
Q_OBJECT
public:
FooItem(QQuickItem *parent=Q_NULLPTR): QQuickItem(parent){
connect(this, &FooItem::widthChanged, this, &FooItem::onWidthChanged);
}
Q_SLOT void onWidthChanged(){
qDebug()<<width();
}
};
【讨论】: