转自http://www.voidcn.com/article/p-rgsuymog-bst.html
我有一个基于QML的应用程序在Qt在运行时生成一些警告:
QDeclarativeExpression: Expression “(function $text() { return pinyin
})” depends on non-NOTIFYable properties:
hanzi::DictionaryEntry::pinyin
我相信它指的是这个类有一些属性没有通知程序(因为不需要):
#ifndef DICTIONARYENTRY_H
#define DICTIONARYENTRY_H
namespace hanzi {
class DictionaryEntry : public QObject {
Q_OBJECT
Q_PROPERTY(QString simplified READ simplified)
Q_PROPERTY(QString traditional READ traditional)
Q_PROPERTY(QString pinyin READ pinyin)
Q_PROPERTY(QString definition READ definition)
public:
explicit DictionaryEntry(QObject* parent = 0);
const QString& simplified() const;
const QString& traditional() const;
const QString& pinyin() const;
const QString& rawDefinition() const;
const QStringList& definitions() const;
const QString& definition() const;
void setSimplified(const QString& v);
void setTraditional(const QString& v);
void setPinyin(const QString& v);
void setDefinitions(const QStringList& v);
};
}
#endif // DICTIONARYENTRY_H
有人知道为什么它显示这些警告,如果他们不重要,有什么办法禁用它们吗?
如果属性值可以更改,那么QML需要一个NOTIFY信号,以便它可以知道它们何时更改并更新属性绑定。
如果无法更改,请将CONSTANT添加到您的属性声明中,例如:
Q_PROPERTY(QString simplified READ simplified CONSTANT)
在你的情况下,有set方法,这意味着属性可以改变,但是如果它们在你的QML中使用时不改变,你可以通过将它们标记为CONSTANT来摆脱警告。