使用grabToImage将QML项目保存为文件到文件时出错

时间:2016-10-09 03:00:28

标签: qt qml qt-quick

我有一个QML项目,我试图grab as an image。有了这样的QML ......

Item {
    id: content
    ...
}

FileDialog {
    folder: shortcuts.documents
    selectExisting: false
    onAccepted: {
        content.grabToImage(function(result){
            if (!result.saveToFile(fileUrl)){
              console.error('Unknown error');
            }
        });
    }
}

...我总是得到"未知错误"文本,即使我输入的文件名如" Test.png"。

出了什么问题?如何将文件保存到图像中?

1 个答案:

答案 0 :(得分:3)

问题是url提供的FileDialog无法作为saveToFile的参数。

虽然saveToFile method没有记录所需的参数类型,但the source code表明它需要QString

但是,这还不够。您还必须从文件URL中删除协议才能使其生效。例如,虽然fileUrl.toString()可能会导致结果 "file:///Users/phrogz/Document/Test.png"
saveToFile方法需要一个像
一样的字符串 "/Users/phrogz/Document/Test.png"

因此:

FileDialog {
    folder: shortcuts.documents
    selectExisting: false
    onAccepted: {
        var urlNoProtocol = (fileUrl+"").replace('file://', '');
        content.grabToImage(function(result){
            if (!result.saveToFile(urlNoProtocol)){
              console.error('Unknown error saving to',urlNoProtocol);
            }
        });
    }
}