我有一个包装另一个普通对象的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中,我想在这个音符改变时做一些事情:
import QtQuick 2.0
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.1
Item {
property QtObject note
onNoteChanged: {
console.info(note.title)
}
}
我希望onModelChanged()
只要我拨打reload()
就会被触发,但它不会发生。我想我需要从某个地方发出一些信号来通知QML视图注释已经改变,但不知道在哪里。我以为我可以从reload()
发出信号,但似乎QObject
没有内置的changed
信号。
有关如何处理此事的任何建议吗?
答案 0 :(得分:5)
仅当实际对象已更改时,才会发出信号,即,为该属性分配了不同的对象。在你的情况下,它将永远是同一个对象。此外,您还没有真正为酒店分配任何东西。如果您已经将对象公开为上下文属性,那么这就是您所需要的。
您可以简单地实现一个信号noteChanged()
,并在C ++中的每次重新加载时发出它。在qml方面,您可以使用Connections
元素为它实现处理程序。
Connections {
target: qmlNote
onNoteChanged: console.info(qmlNote.title)
}