不推荐将参数注入信号处理程序。使用带形式参数的 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)
我有以下问题。
我正在为我的应用程序前端使用 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)