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

Posted

技术标签:

【中文标题】使用grabToImage将QML项目作为图像保存到文件时出错【英文标题】:Error saving QML item as image to file, using grabToImage 【发布时间】:2016-10-09 03:00:28 【问题描述】:

我有一个 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】:

问题是FileDialog 提供的url 作为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);
            
        );
    

【讨论】:

我已经打开Qt bug #44450 来跟踪这个问题。显然,saveToFile 应该直接接受 URL。 哇,digia 通常不会修复错误好几年,但他们会在你发现它之前整整一年修复你的错误:D @ddriver 哈哈。哎呀。我的意思是bug #56436。

以上是关于使用grabToImage将QML项目作为图像保存到文件时出错的主要内容,如果未能解决你的问题,请参考以下文章

QML如何绘制不同的grabToImage()

将具有多种状态的 QtQuick 项目保存到 .png 文件

如何在 QML 中添加和使用资源?

在 C++ 中保存 QML 图像

Qt:以预期的压缩格式保存图像

捕获图像而不保存