【问题标题】:Weird issue with signals in QMLQML 中信号的奇怪问题
【发布时间】:2015-11-20 05:36:50
【问题描述】:

我有一个继承自 QObject 的类。我在声明为的类中有一个属性

Q_PROPERTY(QString errorString READ errorString)

在 QML 中,Qt Creator 建议使用 onErrorStringChanged 信号,这显然是一个只读属性。当我在 C++ 中对类的对象尝试 connect() 方法时,建议中也缺少相同的信号。

谁能澄清问题所在?

【问题讨论】:

    标签: c++ qt qml signals-slots


    【解决方案1】:

    没有问题。你可以在这里阅读:http://doc.qt.io/qt-5/qtqml-syntax-objectattributes.html#property-attributes

    声明自定义属性会隐式创建值更改信号 对于该属性,以及一个关联的信号处理程序,称为 on<PropertyName>Changed,其中<PropertyName> 是 属性,首字母大写。

    QML 自动创建onErrorStringChanged 信号,而在 C++ 中您必须自己定义。

    【讨论】:

    • 如果该属性将有一个onChanged 信号,那么只指定getter 方法有什么意义?顺便说一句,我也尝试了CONSTANT 关键字,它也给出了相同的结果。有什么办法可以避免这个信号?
    • 要点很简单,QML 需要这个信号。引用文档:“请注意,必须指定 NOTIFY 信号以允许 QML 属性绑定。”如果您不需要它,只需忽略它应该可以工作;)。您还可以命名您的属性,例如"errorStringConst" 表示不能更改。
    • 如果errorString 始终相同,则将该属性标记为CONSTANT。我怀疑情况是否如此。如果它能够返回不止一种类型的错误消息,那么如果您希望引用它的 QML 绑定正常工作,则必须提供 NOTIFY 信号。
    • 在 Q_OBJECT 下键入 Q_PROPERTY 会提示 Qt Creator 提供带有完整属性声明的 sn-p。在 sn-p 中填写类型和 getter/setter 名称后,右键单击 Q_PROPERTY 会提供 Refactor 选项以生成 getter/setter 代码。要创建一个常量属性,在生成 getter/setter 代码之前,删除 Q_PROPERTY 宏中的 setter 声明,并将 NOTIFY 和信号名称替换为 CONSTANT,如 Mitch 所写。
    猜你喜欢
    • 2018-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多