如何设置qml信号的属性类型?

时间:2014-11-21 03:43:22

标签: pyqt qml qt-quick qtquick2

我正在学习qmlquickpyqt5并编写一个小型测试脚本。

在这个脚本中,我想在我的UI上删除一些内容并打印它的URL。

test.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

另外,我尝试过urlliststring urllist失败,string无效。

我的剧本出了什么问题?

修改

由于我在qqt中使用qml,我不想使用var类型 使用var,我的python脚本中有一个QJSValue对象而不是基本类型的python。
为什么qml与官方文档的表现不同?文件错了吗?

2 个答案:

答案 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)