无法将 QList<QUrl> 分配给 QString
Posted
技术标签:
【中文标题】无法将 QList<QUrl> 分配给 QString【英文标题】:Unable to assign QList<QUrl> to QString 【发布时间】:2020-04-30 13:36:29 【问题描述】:我遇到了这个错误:
Unable to assign QList<QUrl> to QString
当尝试直接分配drop.urls
的结果(从DropArea
的onDropped
处理程序获得)到Python中标签的text
属性。
基于this doc,我尝试Qt.resolvedUrl
(将类型转换为字符串)如下代码所示。但是,它会导致一个空的文本标签。我正在使用的网址以“file:///”开头。
我做错了什么?
import QtQuick.Window 2.2
import QtQuick 2.2
import QtQuick.Controls 2.14
Window
id: root
visible: true
width: 640
height: 480
title: "Drop Test"
property var attachments: "empty"
DropArea
id: dropArea;
anchors.fill: parent
onEntered:
root.color = "gray";
console.log("You entered drop area")
drag.accept (Qt.LinkAction);
onDropped:
console.log("You dropped " + drop.urls)
attachments = Qt.resolvedUrl(drop.urls)
Label
id: mLableId
text: attachments
将 URL 分配给字符串似乎是一个很明显的问题,但如果它已经在 Python 和 Qt Quick 的上下文中被问过,我从昨天开始搜索后还没有找到任何这样的现有问题。
【问题讨论】:
【参考方案1】:urls 是一个 url 列表,所以你必须迭代和连接:
onDropped:
console.log("You dropped " + drop.urls)
var str = ""
for(var i in drop.urls)
var url = drop.urls[i]
str += Qt.resolvedUrl(url)
attachments = str
【讨论】:
谢谢。我在哪里可以找到关于urls
类型的文档?我确定它在那里(可能很多地方),但我没有看到它。我昨天或今天发现的唯一东西是url
(非数组):doc.qt.io/qt-5/qml-url.html。 (我可能愚蠢地忽略了一些明显的文档。)
@MountainX-for-Monica 你的意思是关于“drop”元素的“urls”属性的文档还是你的意思是数据类型“url”?
在上面的代码中,for循环只执行了一次。第一个日志语句将显示多个逗号分隔的项目,但循环内的日志只执行一个。我猜 for 循环需要将逗号分隔的列表识别为多个项目的列表,或者将 drop.urls 转换为字符串数组需要在循环之前完成。你有什么建议?
@MountainX-for-Monica 嗯,你假设了很多事情。 for 循环不识别逗号,因为这不是他们的任务。再见
我的意思是(据我所知)代码不起作用。 for 循环只执行一次,即使 drop.urls 中包含多个项目。以上是关于无法将 QList<QUrl> 分配给 QString的主要内容,如果未能解决你的问题,请参考以下文章
将 QList<std::string> 转换为 QList<QString>