web-dev-qa-db-ja.com

QMLのNOTIFY不可のプロパティに関する警告

実行時にいくつかの警告を生成するQMLベースのアプリケーションがあります。

QDeclarativeExpression:式「(function $ text(){return pinyin})」は、NOTIFYできないプロパティに依存します: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

なぜこれらの警告が表示されているのか誰か知っていますか?それらが重要ではない場合、それらを無効にする方法はありますか?

41
laurent

プロパティ値が変更される可能性がある場合、QMLはNOTIFY信号を必要とするため、それらがいつ変更されたかを認識し、プロパティバインディングを更新できます。

変更できない場合は、CONSTANTをプロパティ宣言に追加します。次に例を示します。

Q_PROPERTY(QString simplified READ simplified CONSTANT).

あなたのケースでは、プロパティが変更される可能性があることを意味するsetメソッドがありますが、QMLで使用されているときに変更されない場合は、CONSTANTとしてマークすることで警告を取り除くことができます。

75
Dan Milburn