QML 连接:不推荐使用连接中隐式定义的 onFoo 属性

Hao*_*Xie 15 qt qml qt5 qt5.15

升级到 Qt 5.15 时,我收到以下错误消息:

QML Connections: Implicitly defined onFoo properties in Connections are deprecated.
Use this syntax instead: function onFoo(<arguments>) { ... }
Run Code Online (Sandbox Code Playgroud)

下面贴出对应的QML代码

Connections {
    target: AppProxy

    onLogsReady: function(logs) {
        textLogs.text = logs
    }
}
Run Code Online (Sandbox Code Playgroud)

其中onLogsReadyAppProxy类中定义的信号:

class AppProxy : public QObject {
  Q_OBJECT
  Q_DISABLE_COPY(AppProxy)

 public:
  AppProxy(QObject* parent = 0);
  ~AppProxy();

 signals:
  void logsReady(QString logs);

// ...
};
Run Code Online (Sandbox Code Playgroud)

我想知道如何抑制这个警告。

luf*_*ffy 22

在 Qml 5.15 中有一种新的连接语法。在您的情况下,它看起来像这样:

Connections {
    target: AppProxy

    function onLogsReady(logs) {
        textLogs.text = logs
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以在此处阅读更多相关信息:https : //doc.qt.io/qt-5/qml-qtqml-connections.html

  • 我没有找到这个新语法的最低 Qt 版本,这可以方便地了解向后兼容性。**编辑**发现 https://github.com/qt/qtdeclarative/commit/a2eef6b511988b2435c4e39b6b5551e857ce7775 上面写着“不幸的是,该语法在 Qt5.12 中不可用。” (2认同)
  • 所以... 5.15。抛出此警告,并且版本 5.12 不支持此新语法。是否有一个“良好实践”来支持两者?例如,适用于 PySide2 用法,其 Qt 版本可能有所不同。谢谢。 (2认同)