Qt 4.3 Konsole verstecken

Alles rund um die Programmierung mit Qt
PoD GamefreakF
Beiträge: 24
Registriert: 23. August 2007 09:48
Wohnort: schweiz
Kontaktdaten:

Qt 4.3 Konsole verstecken

Beitrag von PoD GamefreakF »

Hallo jung,
ich habe in meinem programm ein paar cmd aufrufe, mit der funktion "system(Variable)". Wie kann ich das cmd fenster das sich bei dieser funktion öffnet verstecken/nicht anzeigen lassen.
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

In dem Du QProcess nutzt.
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
PoD GamefreakF
Beiträge: 24
Registriert: 23. August 2007 09:48
Wohnort: schweiz
Kontaktdaten:

Beitrag von PoD GamefreakF »

jo danke für den tipp,ich hab zwar die doku angschaut, aber irgendwie werde ich nicht schlauer daraus. Könntest du mal ein kleines beispiel machen.
z.B. copy c:/nase.jpg d:/nase.jpg.
kopiert in cmd das das bild nase von c:/ nach d:/
dontinelli
Beiträge: 146
Registriert: 22. September 2006 20:53

Beitrag von dontinelli »

Ich kenne cmd zwar nicht, das wird aber wohl so gehen:

Code: Alles auswählen

QProcess *p = new QProcess(this);
p->start("cmd");
p->write("copy c:/nase.jpg d:/nase.jpg");
p->closeWriteChannel();
if (!p->waitForFinished()) return false;
QByteArray result = p->readAll();
Bei "start" kannst du als zweites Argument noch eine Stringliste von Argumenten mitgeben, vielleicht kannst du den copy-Befehl auch schon dort übergeben. Wie gesagt, ich kenne cmd nicht.
CHeers
DonTinelli

PS steht übrigens alles so in der Doku von QProcess!
PoD GamefreakF
Beiträge: 24
Registriert: 23. August 2007 09:48
Wohnort: schweiz
Kontaktdaten:

Beitrag von PoD GamefreakF »

ich habe so die funktion in mein programm geschrieben, aber sie kopiert kein bild von C:/ nach D:/
Zuletzt geändert von PoD GamefreakF am 30. Januar 2008 13:25, insgesamt 1-mal geändert.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Eigentlich solltest du das "cmd" nicht brauchen (oder brauchst du unter Linux auch das "bash" als app-name? ;))

Code: Alles auswählen

QProcess process;
QStringList args;
args << "C:\nase.jpg" << "D:\nase.jpg";
process.start("copy", args);
sollte es also tun. Wenn natürlich in C:\ kein nase.jpg existiert wird auch der copy fehlschlagen!

Grüße
Franz
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

cmd.exe ist nötig da copy kein executable ist sondern ein Befehl von cmd.exe.
Abgesehen davon - warum einfach wenn es auch umständlich geht, oder warum benutzt man sonst copy zum kopieren von Dateien innerhalb von Qt?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
PoD GamefreakF
Beiträge: 24
Registriert: 23. August 2007 09:48
Wohnort: schweiz
Kontaktdaten:

Beitrag von PoD GamefreakF »

Code: Alles auswählen

QProcess process;
QStringList args;
args << xcopy << "C:\nase.jpg" << "D:\\";
int exitCode = process.execute("cmd", args);
So müsste es theoretisch gehen, oder?
Ich habe es ausprobiert und es bleibt beim execute befehl stehen, dass heisst es macht was. Leider geht es wie gesagt nicht weiter.
Zuletzt geändert von PoD GamefreakF am 31. Januar 2008 10:06, insgesamt 1-mal geändert.
Noci
Beiträge: 7
Registriert: 28. Januar 2008 09:09

Beitrag von Noci »

wenn es wirklich daran liegt, dass xcopy auf eine Usereingabe wartet würde ich versuchen die Aufforderungen einfach zu unterdrücken

Code: Alles auswählen

xcopy /?  ->
/C        Setzt das Kopieren fort, auch wenn Fehler auftreten.
/R        Überschreibt schreibgeschützte Dateien.  ((wenn gewünscht sonst kommt wohl auch eine Rückfrage))
/Y        Unterdrückt die Aufforderung zur Bestätigung, dass eine
          vorhandene Zieldatei überschrieben werden soll.

/I        Falls Ziel nicht vorhanden ist und mehrere Dateien kopiert
          werden, nimmt XCOPY an, dass das Ziel ein Verzeichnis ist.
also eventuell mit

Code: Alles auswählen

args << xcopy << "/C" << "/R" << "/Y" << "C:\\nase.jpg" << "D:\\"; 
versuchen, reine Theorie xD

*edit
weiterer Versuch wäre dann noch die Fehlerausgabe in eine Datei umzuleiten um zu sehen was los ist.
Demnach args noch mit "2> D:\\test.txt" erweitern

Code: Alles auswählen

args << xcopy << "/C" << "/R" << "/Y" << "C:\\nase.jpg" << "D:\\" << "2> D:\\test.txt";
Zuletzt geändert von Noci am 31. Januar 2008 12:06, insgesamt 1-mal geändert.
PoD GamefreakF
Beiträge: 24
Registriert: 23. August 2007 09:48
Wohnort: schweiz
Kontaktdaten:

Beitrag von PoD GamefreakF »

wenn ich das so mache passiert nichts, aber ich bekomme den exit code 1 zurück. Wo kann ich den nachschauen was das zu bedeuten hat .
Korgen
Beiträge: 42
Registriert: 28. März 2006 16:37

Beitrag von Korgen »

schonmal daran gedacht QFile::copy zu verwenden?
Noci
Beiträge: 7
Registriert: 28. Januar 2008 09:09

Beitrag von Noci »

Exit code - Description
0 - Files were copied without error.
1 - No files were found to copy.
2 - The user pressed CTRL+C to terminate xcopy.
4 - Initialization error occurred. There is not enough memory or disk space, or you entered an invalid drive name or invalid syntax on the command line.
5 - Disk write error occurred.
PoD GamefreakF
Beiträge: 24
Registriert: 23. August 2007 09:48
Wohnort: schweiz
Kontaktdaten:

Beitrag von PoD GamefreakF »

Korgen hat geschrieben:schonmal daran gedacht QFile::copy zu verwenden?
1. ja klar habe ich schonmal daran gedacht, aber kannst du mir mal eine funktion posten die Verzeichnisse und deren unterverzeichnisse und deren unterverzeichtisse etc. wo anders hin kopiert.

2. Wollte ich wissen wie man mit QProcess die CMD bedienen kann.
PoD GamefreakF
Beiträge: 24
Registriert: 23. August 2007 09:48
Wohnort: schweiz
Kontaktdaten:

Beitrag von PoD GamefreakF »

Ok alles klar. Es funzt
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

PoD GamefreakF hat geschrieben:aber kannst du mir mal eine funktion posten die Verzeichnisse und deren unterverzeichnisse und deren unterverzeichtisse etc. wo anders hin kopiert.
Ja. Mit Rekursionen bekommst Du noch öfter zu tun, da wäre das eine gute Übung gewesen :-)
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
Antworten