Seite 1 von 1

Anfängerproblem - screenshot auf Knopfdruck machen

Verfasst: 2. November 2008 23:56
von krummnagel
Hallo ich habe folgendes Problem. Vorsicht blutiger Anfänger :)
mein codeauschnitt(macht einen screenshot und speichert diesen):

Code: Alles auswählen

...
QDesktopWidget* desktop = QApplication::desktop();
    QWidget* w = desktop->screen(0);
    QPixmap *snapshot=new QPixmap;
	snapshot->grabWindow(w->winId(), 0, 0, -1, -1);
	QString saveto = "C:\\screenshot.png";
	snapshot->save(saveto);
...
nun wollte ich das der screenshot erst per Knopfdruck gemacht wird und hab an sowas ähnliches gedacht:

Code: Alles auswählen

...

QDesktopWidget* desktop = QApplication::desktop();
QWidget* w = desktop->screen(0);
QPixmap *snapshot=new QPixmap;
snapshot->grabWindow(w->winId(), 0, 0, -1, -1);
QString saveto = "C:\\screenshot.png";
	
QPushButton* makescreen= new QPushButton("screenshot machen");

QObject::connect(makescreen, SIGNAL(clicked()), &a, 
SLOT(snapshot->save(saveto))); //das hier!!

...
"saveto" darf ich hier nicht benutzen ...mein ich zumindest ;)
wie kann ich "snapshot->save(saveto)" also korrrekt als slot in QObject::connect.. einbauen oder wie könnte ich das sonst umsetzen? der code wird sogar ohne Fehler kompiliert

im Anhang nochmal der ganze code

Verfasst: 3. November 2008 01:24
von nexus
Schau dir mal die Doku zum Thema an http://doc.trolltech.com/4.4/signalsandslots.html

Verfasst: 3. November 2008 09:05
von upsala
Den Dateinamen must du nicht übergeben, er ist ja unabhängig vom Button. Beim kompilieren kommt natürlich kein Fehler, aber bei der Ausführung kommt eine Fehlermeldung auf der Konsole.

Verfasst: 3. November 2008 22:29
von krummnagel
mmm
also erst mal danke für die antworten aber leider hat mir der obige link und dein post noch nicht wirklich die augen geöffnet

es wäre nett wenn ihr mich noch weiter in die richtige Richtung schubsen würdet

wie könnte ich mein snapshot->save(saveto) über einen button auslösen?

geht das hier in die richtige Richtung?


Code: Alles auswählen

QObject::connect(meinknopf, SIGNAL(clicked()), &snapshot, SLOT(save(QString)));
mfg

Verfasst: 4. November 2008 09:08
von upsala
Warum willst du unbedingt den Dateinamen mit übergeben?

Verfasst: 5. November 2008 16:31
von dontinelli
Am besten machst du einen eigenen Slot, in welchem du den ganzen Code plazierst. Diesen kannst du dann mit dem clicked-Signal vom QPushButton (z.B. beim initialisieren) verbinden.

thx

Verfasst: 7. November 2008 02:19
von krummnagel
danke für eure antworten

das mit dem slot werde ich sofort mal versuchen !




bei qt gibt es unter examples & demos überigens auch ein screenshot tool mit dokumentation und ausführlichen erklärungen (engl), das hab ich allerdings erst gerade endeckt