无法将 QList<QUrl> 分配给 QString

3

我遇到了这个错误:

Unable to assign QList<QUrl> to QString

当尝试在Python中将从“DropArea”的“onDropped”处理程序获得的“drop.urls”结果直接分配给Label的“text”属性时。根据this doc,我尝试了Qt.resolvedUrl(将类型转换为字符串),如下面的代码所示。然而,它导致文本标签为空。我正在使用以“file:///”开头的URL。我做错了什么?
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个回答

2

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(非数组)的,链接在这里:https://doc.qt.io/qt-5/qml-url.html。(我可能愚蠢地忽略了一些明显的文档。) - MountainX
在上面的代码中,for循环只执行一次。第一个日志语句将显示多个逗号分隔的项,但是循环内部的日志仅被执行一次。我猜测for循环需要将逗号分隔的列表识别为多个项的列表,或者在循环之前需要将drop.urls转换为字符串数组。你有什么建议? - MountainX
@MountainX-for-Monica 嗯,你假设了很多事情。for循环不识别逗号,因为那不是它们的任务。再见。 - eyllanesc
我的观点是(据我所知),代码没有起作用。即使在drop.urls中包含多个项目,for循环也只执行一次。 - MountainX
@MountainX-for-Monica console.log("You dropped " + drop.urls) 的输出是什么? - eyllanesc
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接