【问题标题】:Warning about non-NOTIFYable properties in QML关于 QML 中不可通知的属性的警告
【发布时间】:2011-10-07 09:39:04
【问题描述】:

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

QDeclarativeExpression: 表达式 "(function $text() { return pinyin })" 取决于不可通知​​的属性: 汉字::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

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

【问题讨论】:

    标签: qt warnings qml


    【解决方案1】:

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

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

    Q_PROPERTY(QString simplified READ simplified CONSTANT).
    

    在您的情况下,有 set 方法,这意味着属性可以更改,但如果它们在 QML 中使用时没有更改,您可以通过将它们标记为 CONSTANT 来消除警告.

    【讨论】:

    • 我传递的属性也在qml中声明。我怎样才能让它保持不变?
    • 如果这些 qt 属性可以更改,但不能在特定的 QML 上更改,那该怎么办?例如,一个名为 user 的类,包含电子邮件、PIN、密码……字段。在登录页面上,不能修改任何属性,但是一旦用户登录,他们就可以。是否可以为特定 QML 组件禁用这些警告?我们可以在 QML 端定义:“property static string password = user.password”吗?
    • 我不认为他们已经设置方法的事实在这里有所作为。即使没有 set 方法,我也会收到此错误。我想知道为什么 Qt 文档有此作为示例:Q_PROPERTY(bool focus READ hasFocus)
    猜你喜欢
    • 1970-01-01
    • 2022-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-15
    • 2021-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多