2017-12-03 3 views
1

Warum Speicher seiner nicht jede Datei?QT5 - warum nicht in eine Datei Screenshot und speichern?

#include "mainwindow.h" 
#include <QApplication> 
#include <QPixmap> 
#include <QPainter> 
#include <QList> 
#include <QScreen> 


QPixmap grabScreens() { 
    auto screens = QGuiApplication::screens(); 
    QList<QPixmap> scrs; 
    int w = 0, h = 0, p = 0; 
    foreach (auto scr, screens) { 
    QPixmap pix = scr->grabWindow(0); 
    w += pix.width(); 
    if (h < pix.height()) h = pix.height(); 
    scrs << pix; 
    } 
    QPixmap final(w, h); 
    QPainter painter(&final); 
    final.fill(Qt::black); 
    foreach (auto scr, scrs) { 
    painter.drawPixmap(QPoint(p, 0), scr); 
    p += scr.width(); 
    } 
    return final; 
} 


int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 

    QPixmap pixmap = grabScreens(); 

    QFile file("file.jpg"); 
    file.open(QIODevice::WriteOnly); 
    pixmap.save(&file, "JPG", 1); 

    MainWindow w; 
    w.show(); 

    return a.exec(); 
} 

enter image description here

+0

Um zwischen einem Problem mit Ihrem Code und einem Problem mit der Arbeitsverzeichniskonfiguration zu unterscheiden, versuchen Sie, den absoluten Ausgabepfad fest zu codieren. – Drop

+0

Da C: \ erfordert wahrscheinlich Administratorrechte zu schreiben. Versuchen Sie einen Pfad in Ihrem Home-Verzeichnis, z. Desktop – Drop

+0

Es funktioniert jetzt durch Hinzufügen von C: \\ – YumYumYum

Antwort

2

Die Datei, die Sie suchen in den gleichen Ordner der ausführbaren Datei sein sollte.

Wenn Sie Ihren Code aus QtCreator laufen lassen, sollte es in dem Build-Verzeichnis sein, wie in den Build-Einstellungen der Projekte Seite angegeben.

+0

Bitte sehen Sie meinen obigen EDIT Screenshot. Es spart dort überhaupt nicht. – YumYumYum

+0

Versuchen Sie direkt (Doppelklick) untitled.exe auszuführen und sehen Sie, was passiert. –

+0

Wenn ich einen Doppelklick auf es gibt Fehler: https://imgur.com/a/bAPah – YumYumYum

0

sollten Sie mit QStandardPaths betrachten für einen beschreibbaren Speicherort abfragen für die Screenshot gespeichert werden. Dadurch wird das Problem vermieden, dass versucht wird, in ein schreibgeschütztes Verzeichnis zu schreiben.

Verwandte Themen