PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : QProcess tut nicht das was ich will ...



ChMaster|LFreak
05-02-2005, 16:40
sieht titel und hier der code, währe sonst zu lang :D
http://rafb.net/paste/results/QysNAu33.html

anda_skoa
05-02-2005, 18:07
Wäre aber vielleicht ganz praktisch, wenn du sagen würdest, was nicht geht.

Aber ich hab jetzt ein paar andere Bemerkungen :)

1) Die Erzeugung einer neuen KConfig Instanz zum Auslesen der Config der Applikation ist nicht nötig, die gibt es schon.

2) als Zielverzeichnis für die Files würde sich eher das KDE Cache Verzeichnis als Wurzel mit einem Unterverzeichnis deiner Applikation anbieten, siehe KStandardDirs und Typ "cache"

3) für das Herunterladen würde ich eher KIO::file_copy benutzen, oder für synchronen Download KIO::NetAccess::download
Das sorgt dafür, dass zB Proxy Einstellungen honoriert werden.

4) Das extrahieren aus einem tar.gz kann man auch über KArchive (KIO) oder den tar IO-Slave machen.

Ciao,
_

ChMaster|LFreak
10-02-2005, 14:39
Wäre aber vielleicht ganz praktisch, wenn du sagen würdest, was nicht geht.
nichts geht, erstartet zwar den process, ich bekomm auch die PID angezeigt, aber es tut sich nichts.




1) Die Erzeugung einer neuen KConfig Instanz zum Auslesen der Config der Applikation ist nicht nötig, die gibt es schon.
verstehe ich nicht ganz, wo? ausserdem muss ich die konfig datei auslesen da ja der versionsstring drin steht und ich ihn an den QString weiter gebe.




2) als Zielverzeichnis für die Files würde sich eher das KDE Cache Verzeichnis als Wurzel mit einem Unterverzeichnis deiner Applikation anbieten, siehe KStandardDirs und Typ "cache"
ok daran habe ich nicht geacht, werde ich benutzen, danke ;)




3) für das Herunterladen würde ich eher KIO::file_copy benutzen, oder für synchronen Download KIO::NetAccess::download
Das sorgt dafür, dass zB Proxy Einstellungen honoriert werden.
ok, mal schauen was sich da machen lässt, obwohl mir die Qt variante besser gefällt (ist einfacher),
aber für ein bsp währe ich dankbar :p




4) Das extrahieren aus einem tar.gz kann man auch über KArchive (KIO) oder den tar IO-Slave machen.

hmmm.... habe ich mir mal angschaut, werde leider nicht schlau daraus :( , da ich damit noch nichts gemacht habe, ein bsp währe da auch nicht verkehrt :p

Gruß
ChMaster|LFreak

anda_skoa
10-02-2005, 16:55
nichts geht, erstartet zwar den process, ich bekomm auch die PID angezeigt, aber es tut sich nichts.

Kommt vielleicht etwas am stderr?
Bzw, wenn du einen Slot auf processExited() connectest und dort den exitStatus abfragst, welchen Wert bekommst du dann?



verstehe ich nicht ganz, wo? ausserdem muss ich die konfig datei auslesen da ja der versionsstring drin steht und ich ihn an den QString weiter gebe.

KApplication (d.h. dessen Basisklasse KInstance) hat beim Start bereits die Config des Programms geladen.
KApplication::config oder KInstance::config oder KGlobal::config zeigen alle auf diese Instanz, es ist also nicht nötig, sie nochmal selber einzulesen.



ok, mal schauen was sich da machen lässt, obwohl mir die Qt variante besser gefällt (ist einfacher),
aber für ein bsp währe ich dankbar :p

Ist im wesentlichen eigentlich gleich.
Die Funktion KIO::file_copy bekommt Source und Destination URL und erzeugt dir dafür einen FileCopyJob, ähnliche wie QUrlOperator eine QNetworkOperation erzeugt.
Du kannst dann die Signals des Jobs mit Slots von dir connecten.



hmmm.... habe ich mir mal angschaut, werde leider nicht schlau daraus :( , da ich damit noch nichts gemacht habe, ein bsp währe da auch nicht verkehrt :p


KTar ist eine Subklasse von KArchive und kann auch gzip und bzip komprimierte tar Archive.
Man kann dort so ähnlich wie mit QDir arbeiten, also Verzeichnisse auflisten und Dateien erhalten.

Für den tar IO Slave vermute ich jetzt mal:
man erzeugt aus dem absoluten Filenamen eine tar:/ URL und benutzt dann zB KIO::file_copy um von der "Quelle" in ein Ziel zu "kopieren"

Externes tar ist aber vermutlich erstmal leichter zu implementieren.

Ciao,
_

ChMaster|LFreak
10-02-2005, 17:21
KApplication (d.h. dessen Basisklasse KInstance) hat beim Start bereits die Config des Programms geladen.
KApplication::config oder KInstance::config oder KGlobal::config zeigen alle auf diese Instanz, es ist also nicht nötig, sie nochmal selber einzulesen.
hmmm... da haste recht, aber der versionsstring von meinem programm ist in den sourcen festgelegt. ich downloade die datei, die die versionsnummer enthält, lese sie aus und lasse sie dann in einem Textfeld anzeigen, somit wird erst der download button aktiviert wenn die version höher ist als die vorgeschriebene, sonst bleibt er deaktiviert.



Kommt vielleicht etwas am stderr?
wie du den sourcen von meinem link sehen kannst über gebe ich auch die stdout aus, aber da geschieht nichts, keine anzeige, nichts ...

Gruß
ChMaster|LFreak

anda_skoa
10-02-2005, 20:16
hmmm... da haste recht, aber der versionsstring von meinem programm ist in den sourcen festgelegt. ich downloade die datei, die die versionsnummer enthält, lese sie aus und lasse sie dann in einem Textfeld anzeigen, somit wird erst der download button aktiviert wenn die version höher ist als die vorgeschriebene, sonst bleibt er deaktiviert.

Vielleich reden wir über einen anderen Codeteil. Ich meine da hier


file = QDir::homeDirPath();
file.append( "/.kde/share/config/dbfevrc" );

// read versions string
KConfig *readVersion( kapp->config() );
readVersion = new KConfig( file );
readVersion->setGroup( "DBoxFE Version" );
str_ver = readVersion->readEntry( "Version", str_ver );

readVersion ist die selbe Config wie kapp->config() sofern dein Programm dbfevrc heißt.



wie du den sourcen von meinem link sehen kannst über gebe ich auch die stdout aus, aber da geschieht nichts, keine anzeige, nichts ...

Tut mir leid, in dem Code der in deinem ersten Posting verlinkt ist, wird nur Stdout gelesen, von Stderr sehe ich da nix.

Ciao,
_
Gruß
ChMaster|LFreak[/QUOTE]

ChMaster|LFreak
11-02-2005, 11:05
danke, jetzt seh ich erst das ich es 2x angegeben habe, es reicht nur einmal
anstatt:

readVersion = new KConfig( file );
kann man auch das hier schreiben :p

readVersion = new KConfig( "dbfevrc" );


Tut mir leid, in dem Code der in deinem ersten Posting verlinkt ist, wird nur Stdout gelesen, von Stderr sehe ich da nix.

stimmt ich habe nur stdout, stderr kann ich erst dann testen wenn mein rechner wieder da ist :(
da ich an einem anderen sitze. dieser hatt keine devel packete von KDE installiert und ich installiere
sie auch nicht, sonst gibt es einen auf den Deckel :p

Gruß
ChMaster|LFreak

anda_skoa
11-02-2005, 12:14
danke, jetzt seh ich erst das ich es 2x angegeben habe, es reicht nur einmal
anstatt:

readVersion = new KConfig( file );
kann man auch das hier schreiben :p

readVersion = new KConfig( "dbfevrc" );

Trotzdem noch einmal zuviel.
Die Config deines Programmes ist schon als KConfig Instanz verfügbar!!11! :D



stimmt ich habe nur stdout, stderr kann ich erst dann testen wenn mein rechner wieder da ist :(

Du kannst auch ein Wrapper Script starten und dort stderr von tar auf stdout umleiten und so auch stderr in deinem Programm sehen.

tar $@ 2>&1

Ciao,
_

ChMaster|LFreak
20-02-2005, 18:21
thx, ich mach es nun Mit KTar und KArchive (habe da einige bsps gefunden)
(In den KDevelop sourcen sind 2 bsp enthalten, sind sozusagen keine bsp aber funktionieren)