Alles rund um die Programmierung mit Qt
slash-ex
Beiträge: 239 Registriert: 30. März 2005 21:40
Beitrag
von slash-ex » 2. Juli 2005 14:03
hallo!
ich habe eine kleine funktion (wahrscheinlich nicht ganz richtig)
Code: Alles auswählen
QStringList conf_pipe(QString com)
{
QProcess prc; QString str; QStringList strlist;
prc.addArgument(com);
prc.start();
while(prc.isRunning() )
{
str = prc.readLineStdout();
cout<<"Bearbeite "<<str<<endl;
strlist.append(str);
if(prc.normalExit() )
prc.tryTerminate();
}
return strlist;
}
nun muss ich aber diese stringliste noch ausgeben...
Code: Alles auswählen
textEdit_log->setText( conf_pipe( lineEdit_parameters->displayText() ) );
und wie man weiß nimmt das objekt keine listen
später wird die liste noch bearbeitet ich muss gezielt nach einem muster strings suchen. hat dazu jemand eine idee? es soll den ausgabetext nach pfaden durchsuchen.
AHUser
Beiträge: 27 Registriert: 29. Juni 2005 17:45
Beitrag
von AHUser » 2. Juli 2005 14:39
Schon mit QStringList::join() probiert?
Code: Alles auswählen
textEdit_log->setText( conf_pipe( ... ).join( '\n' ) );
Andreas
slash-ex
Beiträge: 239 Registriert: 30. März 2005 21:40
Beitrag
von slash-ex » 2. Juli 2005 15:43
bei
Code: Alles auswählen
textEdit_log->setText( conf_pipe(lineEdit_parameters->displayText() ).join( '\n' ) );
bekomm ich:
Code: Alles auswählen
In file included from .ui/form1.cpp:25:
.ui/../form1.ui.h: In member function `virtual void Form1::conf()':
.ui/../form1.ui.h:91: Fehler: Ungültige Umformung von »char« in »const char*«
.ui/../form1.ui.h:91: Fehler: Argument 1 von »QString::QString(const char*)« wird initialisiert
make: *** [.obj/form1.o] Fehler 1
AHUser
Beiträge: 27 Registriert: 29. Juni 2005 17:45
Beitrag
von AHUser » 2. Juli 2005 16:07
Hab mich da wohl verschrieben, es muss "\n" heißen und nicht '\n'. QStringList::join() erwartet einen String und kein Zeichen.
Andreas
slash-ex
Beiträge: 239 Registriert: 30. März 2005 21:40
Beitrag
von slash-ex » 2. Juli 2005 17:03
verdammt, das hätt ich aber auch sehen müssen! stand ja auch da
BartSimpson
Beiträge: 1379 Registriert: 6. November 2004 12:03
Kontaktdaten:
Beitrag
von BartSimpson » 2. Juli 2005 17:12
Ist aber in machen Dokus aber schwer zu unterscheiden zwischen ' und "
FlorianBecker
Beiträge: 1213 Registriert: 2. Dezember 2004 10:54
Kontaktdaten:
Beitrag
von FlorianBecker » 2. Juli 2005 17:53
In welchen? In der Qt Doku steht das immer ganz klar finde ich.
BartSimpson
Beiträge: 1379 Registriert: 6. November 2004 12:03
Kontaktdaten:
Beitrag
von BartSimpson » 2. Juli 2005 18:01
Dort schon. Gott lob:) Aber in machen Bücher wird ganz gerne mal ' mit " verwechelt.
slash-ex
Beiträge: 239 Registriert: 30. März 2005 21:40
Beitrag
von slash-ex » 2. Juli 2005 20:15
ich hab da aber noch ein kleines problem
Code: Alles auswählen
QProcess prc; QStringList strlist;
prc.addArgument("./configure");
prc.start();
Code: Alles auswählen
while(prc.isRunning() )
{
if(prc.canReadLineStdout() )
strlist.append(prc.readLineStdout() );
//cout<<"Bearbeite "<<strlist.join( "\n" )<<endl;
textEdit_log->setText( strlist.join( "\n" ) );
}
also die konsolenausgabe wird shon angezeigt. aber erst wenn der prozess schon zu ende ist. d.h das der text auf einen schlag angezeigt wird und nicht zur laufzeit, wie auf der konsole immer zeilenweise.
wie bekomm ich das hin dass das ganze in dem textfeld genauso angezeigt wird wie auf der konsole und nicht alles zum schluss
BartSimpson
Beiträge: 1379 Registriert: 6. November 2004 12:03
Kontaktdaten:
Beitrag
von BartSimpson » 2. Juli 2005 20:19
Versuche es mal mit dem Signal readyReadStandardOutput () vom QProcess.
bzw readyReadStdout () unter QT3
slash-ex
Beiträge: 239 Registriert: 30. März 2005 21:40
Beitrag
von slash-ex » 2. Juli 2005 20:39
irgendwie bleibt die ausgabe leer?!
Code: Alles auswählen
QProcess prc; QStringList strlist;
prc.addArgument("./configure");
prc.start();
while(prc.isRunning() )
{
if(prc.canReadLineStdout() )
strlist.append(prc.readLineStdout() );
//textEdit_log->setText( strlist.join( "\n" ) );
}
connect(&prc, SIGNAL(readyReadStdout() ), textEdit_log, SLOT(readLineStdout() ) );
BartSimpson
Beiträge: 1379 Registriert: 6. November 2004 12:03
Kontaktdaten:
Beitrag
von BartSimpson » 2. Juli 2005 20:43
Wenn denn so:
Dann muss prc und strlist aber eine private variabel sein
Code: Alles auswählen
connect(&prc, SIGNAL(readyReadStdout() ), this, SLOT(daten() ) );
prc.addArgument("./configure");
prc.start();
while(prc.isRunning() )
{
//textEdit_log->setText( strlist.join( "\n" ) );
}
textEdit_log->setText( strlist.join( "\n" ) );
void daten()
{
strlist.append(prc.readLineStdout() );
}
slash-ex
Beiträge: 239 Registriert: 30. März 2005 21:40
Beitrag
von slash-ex » 2. Juli 2005 20:49
Code: Alles auswählen
QStringList Form1::conf_pipe(/*QString com*/)
{
QProcess prc; QStringList strlist;
connect(&prc, SIGNAL(readyReadStdout() ), textEdit_log, SLOT(readLineStdout() ) );
prc.addArgument("./configure");
prc.start();
while(prc.isRunning() )
{
if(prc.canReadLineStdout() )
strlist.append(prc.readLineStdout() );
//textEdit_log->setText( strlist.join( "\n" ) );
}
return strlist;
}
immer noch nicht
BartSimpson
Beiträge: 1379 Registriert: 6. November 2004 12:03
Kontaktdaten:
Beitrag
von BartSimpson » 2. Juli 2005 20:56
Versuche es mal mit dem koregierten Posting. QProcess ist manchmal ziemlich verzwickt.
slash-ex
Beiträge: 239 Registriert: 30. März 2005 21:40
Beitrag
von slash-ex » 2. Juli 2005 22:03
mh, der text wird jetzt jedesmal akualisiert wenn ich auf den knopf drücke der die funktion aufruft.
ich müsste das in die main.cpp reinpacken oder?
warum muss eigentlich
diese schleife mitlaufen? warum verändert das das verhalten?
auf jeden fall erstmal danke