2016-10-09 3 views
0

У меня есть элемент QML, который я пытаюсь сделать grab as an image. С QML нравится так ...Ошибка сохранения элемента QML как изображения в файл, используя grabToImage

Item { 
    id: content 
    ... 
} 

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

... Я всегда получаю «Неизвестная ошибка» текст, даже тогда, когда я введите имя файла, как «test.png».

Что случилось? Как сохранить файл на изображение?

ответ

2

Проблема заключается в том, что 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); 
      } 
     }); 
    } 
} 
+0

Я открыл [Qt ошибка # 44450] (https: // сообщения об ошибках .qt.io/browse/QTBUG-44450) для отслеживания этой проблемы. Очевидно, что URL-адрес должен быть принят непосредственно 'saveToFile'. – Phrogz

+0

Ничего себе, digia обычно не исправляет ошибки в течение многих лет, но они исправили ваш полный год, прежде чем вы его нашли: D – dtech

+0

@ddriver Hah. К сожалению. Я имел в виду [ошибка # 56436] (https://bugreports.qt.io/browse/QTBUG-56436). – Phrogz