关于QML中的非NOTIFYable属性的警告

时间:2011-07-18 04:25:23

标签: qt warnings qml

我在Qt中有一个基于QML的应用程序,它在运行时生成一些警告:

  

QDeclarativeExpression:Expression“(function $ text(){return pinyin   })“取决于非NOTIFYable属性:   汉字::的DictionaryEntry ::拼音

我认为它引用了这个类,它有一些没有通知符的属性(因为不需要):

#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

有人知道为什么它会显示这些警告,如果它们不重要,有没有办法禁用它们?

1 个答案:

答案 0 :(得分:72)

如果属性值可以更改,那么QML需要一个NOTIFY信号,以便它可以知道它们何时发生了更改并更新了属性绑定。

如果无法更改,请将CONSTANT添加到您的媒体声明中,例如:

Q_PROPERTY(QString simplified READ simplified CONSTANT).

在你的情况下,有一些set方法,这意味着属性可以改变,但如果它们在你的QML中被使用时没有改变,你可以通过将它们标记为{{1}来消除警告。 }}