定义 QML 信号参数类型时出现意外的 Token `:'

Posted

技术标签:

【中文标题】定义 QML 信号参数类型时出现意外的 Token `:\'【英文标题】:Unexpected Token `:' while defining QML signal parameter type定义 QML 信号参数类型时出现意外的 Token `:' 【发布时间】:2020-04-07 08:25:30 【问题描述】:

我正在尝试熟悉 QML。我正在关注thisQt 提供教程,但遇到了问题。

问题:

在创建Cell.qml 文件时,我需要创建一个点击信号,其中名为cellColor 的单个参数被定义为color 类型(如果我理解正确

../QMLTest/Cell.qml:6 意外令牌`:'

来自Cell.qml 的代码 sn-p 是:

import QtQuick 2.0

Item 
    id: container
    property alias cellColor: rectangle.color
    signal clicked(cellColor: color)                   <-----Problem - line 6

    width: 40; height: 25
    //...

由于 QML 使用 javascript,我想我会试试这个,它有效:

signal clicked(var cellColor)

一个明显的缺点是你丢失了定义的类型(基于我之前的假设)。

问题:

为什么提供的信号代码不起作用,使用var 关键字而不是定义类型有什么缺点吗?

更新

在回答被接受后添加。

我还应该提到,我正在使用 Qt Creator 4.10.0 和 Qt 5.13.1 (MSVC 32bit)

【问题讨论】:

【参考方案1】:

这种语法是 Qt 5.14 中的新语法。它遵循 TypeScript 语法和即将推出的 QML 3 的方法。对于较旧的 Qt 版本,人们会收到您提到的错误消息。经典且迄今为止仍受支持的语法是

signal clicked(color cellColor)

Qt documentation about QML signals 中甚至还没有提到 name: type 语法。

【讨论】:

以上是关于定义 QML 信号参数类型时出现意外的 Token `:'的主要内容,如果未能解决你的问题,请参考以下文章

SyntaxError:编译 ejs 时出现意外的 token.ejs

[Qt Quick 踩坑] QML端函数参数未定义

发送图像时出现 Python 套接字错误。无法解码字节/意外 EOF

从标准输入读取参数时出现意外行为

使用导入类型时出现意外令牌

向工作人员发送嵌套参数时出现意外令牌 - Rails 6