我正在学习qml
,quick
和pyqt5
并编写一个小的测试脚本。
在此脚本中,我想在我的 UI 上放置一些内容并打印它的 URL。
测试.qml
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
有效。
我的脚本有什么问题?
编辑
由于我将 qml 与 pyqt 一起使用,因此我不想使用类型 var
.
使用 var,我将在我的 python 脚本中得到一个QJSValue
对象而不是基本类型的 python.
为什么 qml 与官方文档的性能不同?文件有误吗?
看来Qt文档中确实存在错误。据说(这里)是
允许的参数类型 [用于信号参数] 与下面列出的参数类型相同 在此页面上定义属性属性。
然而,可以按如下方式定义属性:
property list<Item> items
而这是无效的:
signal mysignal(list<Item> items)
但无论如何,QML列表类型不是解决方案。官方文档非常清楚:
列表只能存储 QML 对象,不能包含任何基本类型 值。(若要在列表中存储基本类型,请使用 var 类型 相反。
换句话说,你不能使用list
来存储字符串,url,int。你必须使用var
.另一种解决方案是使用带有自定义分隔符而不是 url 列表的格式化字符串,并将其拆分在 Python 端。
看起来urllist是一个url数组,所以在这种情况下你可以使用var
:
signal filedroped(var urls)