如何通知 QML 项目其 属性 已更改?
How to notify QML item that its property has changed?
我有一个包装另一个普通对象的 QObject:
#include "qmlnote.h"
QString QmlNote::title() const {
return note_.title();
}
void QmlNote::reload(const Note ¬e) {
note_ = note;
}
我使用这个在 QML 中加载:
ctxt->setContextProperty("note", &qmlNote);
后来我让它包装了不同的音符:
qmlNote.reload(newNote);
然后在QML中,当这个note改变的时候我想做点什么:
import QtQuick 2.0
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.1
Item {
property QtObject note
onNoteChanged: {
console.info(note.title)
}
}
我希望在我调用 reload()
时触发 onModelChanged()
但它没有发生。我想我需要从某个地方发出一些信号来通知 QML 视图注释已更改,但不确定在哪里。我以为我可以从 reload()
发出信号,但似乎 QObject
没有内置 changed
信号。
关于如何处理这个问题有什么建议吗?
仅当实际对象发生变化时才会发出信号,也就是说,将不同的对象分配给 属性。在您的情况下,它将始终是同一个对象。此外,您还没有真正为 属性 分配任何内容。如果您已经将对象公开为上下文 属性 那么这就是您所需要的。
您可以简单地实现一个信号 noteChanged()
并在 C++ 中的每次重新加载时发出它。在 qml 方面,您可以使用 Connections
元素为其实现处理程序。
Connections {
target: qmlNote
onNoteChanged: console.info(qmlNote.title)
}
我有一个包装另一个普通对象的 QObject:
#include "qmlnote.h"
QString QmlNote::title() const {
return note_.title();
}
void QmlNote::reload(const Note ¬e) {
note_ = note;
}
我使用这个在 QML 中加载:
ctxt->setContextProperty("note", &qmlNote);
后来我让它包装了不同的音符:
qmlNote.reload(newNote);
然后在QML中,当这个note改变的时候我想做点什么:
import QtQuick 2.0
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.1
Item {
property QtObject note
onNoteChanged: {
console.info(note.title)
}
}
我希望在我调用 reload()
时触发 onModelChanged()
但它没有发生。我想我需要从某个地方发出一些信号来通知 QML 视图注释已更改,但不确定在哪里。我以为我可以从 reload()
发出信号,但似乎 QObject
没有内置 changed
信号。
关于如何处理这个问题有什么建议吗?
仅当实际对象发生变化时才会发出信号,也就是说,将不同的对象分配给 属性。在您的情况下,它将始终是同一个对象。此外,您还没有真正为 属性 分配任何内容。如果您已经将对象公开为上下文 属性 那么这就是您所需要的。
您可以简单地实现一个信号 noteChanged()
并在 C++ 中的每次重新加载时发出它。在 qml 方面,您可以使用 Connections
元素为其实现处理程序。
Connections {
target: qmlNote
onNoteChanged: console.info(qmlNote.title)
}