gpt4 book ai didi

c++ - 如何捕获通过 Q_PROPERTY 发出的信号?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:42:20 24 4
gpt4 key购买 nike

http://doc.qt.io/qt-5/qtqml-cppintegration-exposecppattributes.html

class Message : public QObject
{
Q_OBJECT
Q_PROPERTY(QString author READ author WRITE setAuthor NOTIFY authorChanged)
public:
void setAuthor(const QString &a) {
if (a != m_author) {
m_author = a;
emit authorChanged();
}
}
QString author() const {
return m_author;
}
signals:
void authorChanged();
private:
QString m_author;
};

他们写了emit authorChanged();

我想知道这个信号的插槽在哪里?

当发出 authorChanged() 信号时,哪些代码会被更改?

最佳答案

如果您在 C++ 中使用此属性,则必须自己提供和连接插槽,但如果您阅读其余部分,则在 Qml 中:

In the above example, the associated NOTIFY signal for the author property is authorChanged, as specified in the Q_PROPERTY() macro call. This means that whenever the signal is emitted — as it is when the author changes in Message::setAuthor() — this notifies the QML engine that any bindings involving the author property must be updated, and in turn, the engine will update the text property by calling Message::author() again.

它表示宏的 NOTIFY 部分通知 QML 引擎它必须连接到此信号并更新涉及此属性的所有绑定(bind)。

Q_PROPERTY 只是公开属性,但实际工作发生在 setAuthor 中,它也发出信号。如果设置了属性,QML 也会使用此方法。

更新:

问:我想知道这个信号的插槽在哪里?

QML 中的插槽位于 QML 引擎中。

问:发出 authorChanged() 信号时,哪些代码会发生变化?

QML 更新涉及指定属性的所有绑定(bind)。

关于c++ - 如何捕获通过 Q_PROPERTY 发出的信号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47261276/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com