我正在学习qml
,quick
和pyqt5
并编写一个小型测试脚本。
在这个脚本中,我想在我的UI上删除一些内容并打印它的URL。
import QtQuick 2.3
Rectangle {
id : root
signal clicked(int x, int y)
signal filedroped(list url)
width: 800
height: 450
MouseArea {
anchors.fill: parent
onClicked: {
parent.clicked(mouseX, mouseY)
}
DropArea {
anchors.fill: parent
onDropped: {
root.filedroped(drop.urls)
}
}
}
}
该文档说:除了枚举类型之外的任何QML基本类型都可以用作自定义属性类型。
但是我在signal filedroped
:
Invalid signal parameter type: list
另外,我尝试过urllist
和string
urllist
失败,string
无效。
我的剧本出了什么问题?
由于我在qqt中使用qml,我不想使用var
类型
使用var,我的python脚本中有一个QJSValue
对象而不是基本类型的python。
为什么qml与官方文档的表现不同?文件错了吗?
答案 0 :(得分:2)
在Qt文档中确实存在错误。据说(here)
允许的参数类型[用于信号参数]与下面列出的相同 Defining Property Attributes在此页面上。
然而,人们可以定义如下属性:
property list<Item> items
虽然这是无效的:
signal mysignal(list<Item> items)
但无论如何,QML列表类型不是解决方案。 official documentation非常明确:
列表只能存储QML对象,不能包含任何基本类型 值。 (要在列表中存储基本类型,请使用var类型 代替)。
换句话说,您无法使用list
来存储字符串,url,int。您必须使用var
。另一种解决方案是使用带有自定义分隔符的格式化字符串而不是您的URL列表,并将其拆分为Python端。
答案 1 :(得分:0)
看起来urllist是一个url数组,因此在这种情况下你可以使用var
:
signal filedroped(var urls)