Seite 1 von 1

QProcess Std-Kommunikation

Verfasst: 10. November 2010 22:42
von Pixtar
Hi Leute,

ich wollte mal austesten ob der Datenaustausch über den std::out funktioniert. Habe schon im Forum nach Threads gesucht, war auch was dabei, funktioniert bei mir nur nicht. :evil: Bislang ist folgender Code entstanden:

Hauptprogramm (*.cpp)

Code: Alles auswählen

#include "widget.h"
#include <QDebug>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    myLabel = new QPlainTextEdit(this);
    QString secApp = qApp->applicationDirPath()+"/test2.exe";
    QProcess myProcess(this);
    myProcess.start(secApp);

    while ( myProcess.waitForFinished() ) {
        QString output = myProcess.readAll();
        myLabel->appendPlainText( output );
    }
}

Widget::~Widget()
{

}
Zu startendes Programm: (*.cpp)

Code: Alles auswählen

#include "widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    tester = new QPushButton("start",this);
    connect(tester,SIGNAL(clicked()),this,SLOT(sendMsg()));
}

Widget::~Widget()
{

}

void Widget::sendMsg(){
    std::cout << "read output: LOL";
}
Verstehe gerade nicht, wieso da garnichts ankommt!? :( Also das Hauptprogramm startet das 2. Programm, aber nach dem Buttonklick und dem Beenden der 2. Programms bleibt das PlainTextfeld leer...

Wo ist mein Denkfehler?

Testsystem: Win7 mit Qt4.6.2 Non-Commercial

Grüße Pixtar

NACHTRAG: Fehler gefunden .. sendMsg() war nicht als SLOT deklariert!

NACHTRAG2: Ist es ebenfalls möglich Daten vom Hauptprogramm an das 2. Programm zu senden? Wenn ja, wie funktioniert das circa?

Verfasst: 11. November 2010 07:11
von google
kommt auf das Programm an. Also normalerweise kommt man über Api´s ran. Oder aber du ließt die Speicheraddressen aus und veränderst sie.

Re: QProcess Std-Kommunikation

Verfasst: 11. November 2010 08:20
von solarix
Pixtar hat geschrieben:Ist es ebenfalls möglich Daten vom Hauptprogramm an das 2. Programm zu senden? Wenn ja, wie funktioniert das circa?
Falls du dich damit auf dein Beispiel (mit stdin/stdout) beziehst:

Das man mit write() Daten senden kann, steht in der Doku:
http://doc.qt.nokia.com/4.7/qprocess.html#details

Falls nicht (falls die Frage genereller Natur war), würde ich andere IPC-Mechanismen empfehlen als "du liest die Speicheraddressen aus". Am anfängerfreundlichsten sind vermutlich (TCP- uder UDP-)Sockets.

hth..