'grabToImage save the delagate pathview qml
Hello my question is the following I am trying to iterate over the pathview delegate but I am getting an error that it does not find the image I want to save after saving the path. I have already worked with grabToImage to save canvas, graphics and a couple of other things but nothing with pathview delegates.
And everything I find about grabToImage has nothing to do to find the solution to this particular problem.
If you can guide me or help me I would appreciate it in advance
import QtQuick 2.15
import QtQuick.Controls 2.12
import QtQuick.Window 2.2
import Qt.labs.platform 1.1
Window {
width: 600
height: 600
visible: true
ListModel {
id: modelcon
ListElement { img: "test.jpg" }
ListElement { img: "test.jpg" }
ListElement { img: "test.jpg" }
ListElement { img: "test.jpg" }
ListElement { img: "test.jpg" }
ListElement { img: "test.jpg" }
ListElement { img: "test.jpg" }
}
PathView {
id: imgView
clip: true
focus: true
interactive: true
pathItemCount: 3
model: modelcon
preferredHighlightEnd: 0.5
preferredHighlightBegin: 0.5
anchors.fill: parent
function nextItem() {
imgView.incrementCurrentIndex();
}
function preItem() {
imgView.decrementCurrentIndex();
}
function toItem(index) {
if (index <= imgView.itemCount && imgView.currentIndex !== index) {
imgView.currentIndex = index;
}
}
delegate: Image {
x: (parent.width - width)/ 2
y: (parent.height - height)/ 2
z: PathView.iconOrder
width: parent.width* 0.9
height: parent.width * 0.4
property bool rounded: true
property bool adapt: true
clip: true
source: img
scale: PathView.iconScale
opacity: PathView.iconOpacity
}
path: Path {
startX: 0
startY: imgView.height * 0.5
PathAttribute { name: "iconScale"; value: 0.2 }
PathAttribute { name: "iconOpacity"; value: 10.2 }
PathAttribute { name: "iconOrder"; value: 0 }
PathLine {x: imgView.width / 2; y: imgView.height/2 }
PathAttribute { name: "iconScale"; value: 1 }
PathAttribute { name: "iconOpacity"; value: 1 }
PathAttribute { name: "iconOrder"; value: 8 }
PathLine {x: imgView.width; y: imgView.height/2 }
}
Button {
id: btnOpen
visible :true
width: 80
height: 80
text: "Save"
anchors.verticalCenterOffset: 0
background: Rectangle {
color: "#00000000"
}
onClicked:{
filedialogSave.open()
}
}
}
FileDialog {
id: filedialogSave;
title: "Save image";
nameFilters: ["Image Files (*.png)", "Image Files(*.jpg)"];
visible: false
fileMode: FileDialog.SaveFile
onAccepted: {
let ruta = currentFile.toString().replace('file: ///', '')
imgView.grabToImage(function(result) {
result.saveToFile(ruta)
});
filedialogSave.close()
}
}
}
Solution 1:[1]
I found the solution
function grabToImage(item, fileName) {
item.grabToImage(function(image) {
image.saveToFile(fileName);
});
}
Consists of iterating on the item outside the delegate with its parent "item" which composes all QtQuick.Controls components.
grabToImage( id , "filename.extension")
It is placed in the main parent and then grabToImage( id , "filename.extension") is normally called.
Solution 2:[2]
If you want to access the delegates image, put your delegate into an Item and assert the property pointing to your delegate's modeldata.
delegate:
Item {
property var modelData:model
Image {
x: (parent.width - width)/ 2
y: (parent.height - height)/ 2
z: PathView.iconOrder
width: parent.width* 0.9
height: parent.width * 0.4
property bool rounded: true
property bool adapt: true
clip: true
source: img
scale: PathView.iconScale
opacity: PathView.iconOpacity
}
}
access your image while saving like this:
imgView.currentItem.modelData.img
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Laito |
Solution 2 | Pj Toopmuch |