Ich versuche Netzwerk Bild anzuzeigen qml verwenden und dann das Bild speichern C++ Code,Speicher QML Bild in C++
Hier ist der QML-Code,
import QtQuick 2.3
import QtQuick.Window 2.2
import com.login 1.0
Window {
visible: true
width : 500
height: 500
Login{id: login}
MouseArea {
anchors.fill: parent
onClicked: {
// Qt.quit();
login.save(image);
}
}
Image {
id: image
source: "http://www.test.com/webp/gallery/4.jpg"
}
}
Und in meinem Login-Klasse Spar Bild wie,
void Login::save(QQuickItem *item)
{
qDebug()<<"width: "<<item->width();
qDebug()<<"height: "<<item->height();
QQuickWindow *window = item->window();
QImage image = window->grabWindow();
QPixmap pix = QPixmap::fromImage(image);
pix.save("C:/Users/haris/Desktop/output.png");
}
ich die richtige Breite und Höhe des Bildes innerhalb C++ Klasse bin immer, aber das Problem ist, ich nicht einen Weg finden kann das Bild Artikel von QQuickItem
zu speichern.
Momentan speichere ich das Bild, indem ich das Fenster eingrabe, das tatsächlich nicht die tatsächliche Bildgröße auf der Ausgabedatei gibt, sondern Ausgabedatei mit aktueller qml Fenstergröße gibt.
Grundsätzlich verfolge ich den Code hier saving QML image aber es scheint QDeclarativeItem
in QT5 veraltet ist, so wähle ich QQuickItem
wo, wie es in QQuickItem
keine Farbe Option ist.
Hallo Danke für die Antwort, habe ich versucht, beide 'grabResult-> saveToFile()' und 'grabResult-> Bild()' aber beide nicht, im ersten Fall gibt es immer 'false' und im zweiten Fall gibt es null Image, was könnte das Problem sein? – Haris
Ich denke, das Problem ist, wie Docs sagt 'Der Greifer passiert asynchron und das Signal QQuickItemGrabResult :: ready() wird ausgegeben, wenn der Greifer abgeschlossen ist ', muss ich möglicherweise Ready-Signal verwenden. – Haris
Danke, ich habe die Antwort mit Code bearbeitet, der das mit einer Lambda-Funktion behandelt, um auf das Signal zu reagieren. – coyotte508