2014-11-21 89 views
1

我在学习qml,quickpyqt5并编写一个小测试脚本。如何设置qml信号的属性类型?

在这个脚本中,我想删除一些东西在我的用户界面上,并打印它的网址。

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有效。

我的脚本有什么问题?

编辑

自从我与PyQt的QML使用,我不想使用类型var
随着var,我会得到一个QJSValue对象,而不是python脚本中的基本类型的python。
为什么qml与官方文档有不同之处?文件是否错误?

回答

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端。

0

它看起来是urllist是URL的一个数组,所以你可以在这种情况下使用var

signal filedroped(var urls) 
+0

我不喜欢'var',细节被添加到我的问题中。 – PaleNeutron 2014-11-21 04:57:19