不推荐将参数注入信号处理程序。使用带形式参数的 JavaScript 函数

Injection of parameters into signal handlers is deprecated. Use JavaScript functions with formal parameters instead

我有以下问题。

我正在为我的应用程序前端使用 QML。

对于我的一个组件,我使用了一个 ListView,它使用一个自定义委托,该委托在一个名为 vmIndex 的变量中包含它自己的索引(和一些其他数据)。这是列表视图的声明:

                ListView {
                    id: studySelectListView
                    anchors.fill: parent
                    model: studySelectList
                    delegate: VMStudyEntry {
                        width: studySelectBackground.width
                        height: studySelectBackground.height/4
                        onItemSelected: {
                            selectionChanged(vmIndex,true); // LINE WITH WARNING
                        }
                    }
                }

现在,当项目被选中时,我需要调用一个名为 selectionChange 的函数并将 vmIndex 作为参数发送给该函数。

VMStudyEntry 是这样的:

Item {
    id: vmStudyEntry

    signal itemSelected(int vmIndex);

    MouseArea {
        anchors.fill: parent
        onClicked: {
            vmStudyEntry.itemSelected(vmIndex);
        }
    }
    Rectangle {
        id: dateRect
        color: vmIsSelected? "#3096ef" : "#ffffff"
        border.color: vmIsSelected? "#144673" : "#3096ef"
        radius: mainWindow.width*0.005
        border.width: mainWindow.width*0.0005
        anchors.fill: parent
        Text {
            font.family: viewHome.gothamR.name
            font.pixelSize: 12*viewHome.vmScale
            text: vmStudyName
            color: vmIsSelected? "#ffffff" : "#000000"
            anchors.centerIn: parent
        }
    }

}

这一切都在 Qt 5.13.2 上完美运行。但我现在搬到了 Qt 6.1.2。据我所知,该代码实际上仍然有效,但我收到此警告:

Parameter "vmIndex" is not declared. Injection of parameters into signal handlers is deprecated. Use JavaScript functions with formal parameters instead.

出现此警告的行已在上面标识。谁能告诉我如何重新定义它以使此警告消失?

看一下here,在Qt6中需要如下语法:

onItemSelected: function(vmIndex) { selectionChanged(vmIndex,true); }

或者,如果您愿意,可以使用更像 lambda 的选项:

onItemSelected: vmIndex => selectionChanged(vmIndex, true)