Vorabinformationen: Ich bin ziemlich neu bei Qt und mittelmäßig lange bei C++, bisher habe ich Konsolenprogramme geschrieben und versehe diese nun nach und nach mit GUIs. Dabei programmiere ich in erster Linie unter Linux, es muss aber auch unter Windows laufen.
Ich bin mit meinem jetzigen Projekt ziemlich weit fortgeschritten, hänge aber noch an einer Stelle fest. Hierbei rufe ich ein externes Konsolenprogramm auf, das in erster Linie nur eine Ergebnisdatei erzeugen soll, damit mein Programm diese weiter auswerten kann. Bisher hat das einfach mit dieser kurzen Code-Zeile funktioniert:
Das funktioniert zwar auch aus der GUI heraus, aber dann sehe ich die Konsolenausgabe nicht mehr, was in sofern schlecht ist, da ich dann den Fortschrittsbalken dieses externen Programms nicht sehe. (Und außerdem die GUI solange einfriert.) Mein bisheriger Code, um diese Funktion an Qt anzupassen, sieht erst einmal so aus:
Code: Alles auswählen
QProcess p;
p.start("jags", QStringList() << "script.txt");
if (p.waitForStarted())
{
p.waitForFinished();
QByteArray qb = p.readAllStandardOutput();
logfile << qb.data() << endl;
QCoreApplication::processEvents(QFlags<QEventLoop::ProcessEventsFlag>(QEventLoop::ExcludeUserInputEvents));
}
else cerr << "Failed to start JAGS via QProcess!" << endl;
Meine Frage ist nun: Gibt es eine Möglichkeit, den Code so anzupassen, dass er nicht bloß die gesamte Konsolenausgabe speichert und nachträglich ausgibt, sondern in Echtzeit während der Ausgabe jedes Zeichen einliest und überprüft? Das wäre in der Hinsicht hilfreich, dass der Fortschritt auf der Konsole mit Sternchen dargestellt wird, und ich somit anhand der Anzahl der bisher eingelesenen Sternchen eine QProgressBar in der GUI füttern könnte. (Die offizielle Dokumentation zu QProcess finde ich da übrigens als Anfänger nicht so hilfreich, mir fehlen einfach die konkreten Code-Beispiele.) Für Tipps wäre ich dankbar!
