Output von QProcess auslesen

Alles rund um die Programmierung mit Qt
Antworten
Jimmyanderson
Beiträge: 10
Registriert: 15. Mai 2010 22:50

Output von QProcess auslesen

Beitrag von Jimmyanderson »

Hallo Leute,
ich kämpfe grade damit, den Output den ein QProcess ausgibt auszulesen.
"myProcess->execute("pgrep gst-launch-0.10");"
Bei diesen Befehl werden insgesamt 4 Zahlen ausgeben, die würde ich gerne in einen String speichern.Danke schon mal für die Antworten.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Jimmyanderson
Beiträge: 10
Registriert: 15. Mai 2010 22:50

Beitrag von Jimmyanderson »

Hey
danke für die Antwort,aber irgendwie klappt es immer noch nicht. Kann mir jemand, dass vllt so grob erklären? Ansich würde mir glaub ich das Prinzip schon reichen.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Jimmyanderson hat geschrieben:Hey
danke für die Antwort,aber irgendwie klappt es immer noch nicht.
Poste doch mal was du schon hast, und erklär was noch nicht geh.
Schau dir auch speziell waitForFinished() und readAll()/readAllStandardOutput() an.
Die Doku bringt unter "Synchronous Process API" ein Beispiel das du mit wenig Aufwand auf deine Anwendung umschneidern kannst.
Jimmyanderson
Beiträge: 10
Registriert: 15. Mai 2010 22:50

Beitrag von Jimmyanderson »

Ich will einen eigenen Mediacenter programmieren. Da ich Ubuntu nutze,dachte ich mir, dass ich Gstreamer für den Mediencenter benutzten werde. Also ich bin schon soweit bekommen, dass ich Musik abspielen kann,jedoch wenn ich das Programm schließe, läuft Gstreamer weiterhin im Hintergrund. Im Internet habe ich kein Befehl gefunden um Gestreamer zu pausieren bzw zu schließen.Daraufhin dachte ich mir ich beende den Prozess durch einen Befehl.Hoffe,dass ich ne grobe Übersicht gegeben habe^^ Quellcode sieht dann folgender massen aus:

// myThread.cpp
Thread::Thread()
{
player = new QProcess;
}

void Thread::run()
{

player->execute("gst-launch-0.10 playbin uri=file:///home/sebastian/Desktop/test.mp3");

}

void Thread::stop()
{
QProcess killer;
killer.start("pgrep gst-launch-0.10");
qDebug() << killer.readAllStandardOutput();
}

Ich musste für mein Programm einen Thread benutzten und Thread::stop ist sozusagen mein Ansatz gewesen,wie die Lösung für mein Problem aussehen könnte. Jedoch klappte dies nicht.

//music.cpp

Music::Music(QWidget *parent) : QWidget(parent)
{
play = new QPushButton("Play");
layout = new QHBoxLayout;

connect(play,SIGNAL(clicked()),this,SLOT(playMyMusic()));
layout->addWidget(play);
setLayout(layout);
}

void Music::playMyMusic()
{

if(player.isRunning())
player.stop();
else
player.start();
}

und hier ist dann eben zum Test ein Fenster mit einem Playbutton, der eben die Musik abspielen bzw abschalten soll.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Und wo ist da auch nur ein Hinweis von der Doku die ich gezeigt habe? Im Absatz 'Communicating via Channels' steht ja nun alles was man zumidnest zum erste Test braucht.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Jimmyanderson
Beiträge: 10
Registriert: 15. Mai 2010 22:50

Beitrag von Jimmyanderson »

QProcess killer;
killer.start("pgrep gst-launch-0.10");
killer.waitForStarted();
killer.waitForReadyRead();
killer.waitForFinished();


player->execute("kill "+ QString(killer.readAll()));

Sooo mit diesem Code hab ich das Problem gelöst :D
Danke für deine Hilfe :D
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Wobei das dreifache waitForXYZ() doch unnötig ist. Es reicht ein reines "waitForFinished()", oder?
Schau mal in die Doku und versuch zu verstehen, was du da treibst ;)
Jimmyanderson
Beiträge: 10
Registriert: 15. Mai 2010 22:50

Beitrag von Jimmyanderson »

Hast recht waitForFinished(); reicht aus^^
Okay ich muss mir das nochmal alles genau durchlesen.
Ich merk schon Qt und Delphi sind schon andere Welten xD
Antworten