fileDialogDCM.fileUrls.count给出“未定义”(QML)

时间:2018-07-25 05:52:13

标签: qt qml filedialog

Ubuntu 16.04 Qt,.qml

嗨,我正在尝试通过调用遍历从用户那里收到的Urls

console.log(fileDialogDCM.fileUrls.count)

在用户成功从FileDialog的目录中选择文件后(获得最大数量)。但是,我收到的是“未定义”。对象fileDialogDCM.fileUrls的类型应为QList<QUrl>。我可以通过致电

访问单个网址

console.log(fileDialogDCM.fileUrls[i])

因此,我希望考虑的QList不为空。考虑我在QML中的菜鸟,我在做什么错? 这是最小的工作示例:

FileDialog {
    id: fileDialogDCM
    selectMultiple: true
}

Button {
    id: loadDCM
    text: qsTr("Load DCM")
    property var aListOfPlans: fileDialogDCM.fileUrls
    onClicked: {
        for(var i=0; i<4; i++) {
          console.log(aListOfPlans[i])
        } //writes URLs of first 4 selected plans
        console.log(aListOfPlans.count) //gives undefined 
    }
}

非常感谢

2 个答案:

答案 0 :(得分:0)

我想知道您期望从代码中得到什么。您是否不认为必须先打开FileDialog才能打印出选定的网址?而且根本没有list.count属性。

我想应该是这样的:

FileDialog {
    id: fileDialogDCM
    selectMultiple: true
    onAccepted: {
        for(var i = 0;i < fileDialogDCM.fileUrls.length;i ++)
        {
            console.log(fileDialogDCM.fileUrls[i]);
        }
    }
}

Button {
    id: loadDCM
    text: qsTr("Load DCM")
    onClicked: {
        fileDialogDCM.visible = true;
    }
}

请参考Qt的出色文档/示例,而不是发明/实施正确方法的想法。

答案 1 :(得分:0)

当然,我在FileDialog上调用open,但是考虑到它很明显,所以我没有在示例中包括它。

MenuItem {
            text: qsTr("Import DCM")
            onTriggered: {
                fileDialogDCM.open()
                console.log("[INFO]     Import DCM triggered")
            }
        }

但是,我找到了解决方案(或意识到了真正的问题所在)。 我使用的是.count(未定义的数字)而不是.legth(给出的数字)