无法将 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的结果(从DropAreaonDropped处理程序获得)到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的主要内容,如果未能解决你的问题,请参考以下文章

Qt QList C3892:无法分配给常量变量

无法从文件中读取 QList<Class*>

QList中QPushButton的坐标

将 QList<std::string> 转换为 QList<QString>

PromiseKit 无法将类型 '[Result<TYPE>]' 的值分配给类型 '[TYPE]

Alamofire:错误:无法将“结果<_,_>”类型的值分配给“结果”类型