Seite 1 von 2
[gelöst] qstringlist -> qstring
Verfasst: 2. Juli 2005 14:03
von slash-ex
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.
Verfasst: 2. Juli 2005 14:39
von AHUser
Schon mit QStringList::join() probiert?
Code: Alles auswählen
textEdit_log->setText( conf_pipe( ... ).join( '\n' ) );
Verfasst: 2. Juli 2005 15:43
von slash-ex
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
Verfasst: 2. Juli 2005 16:07
von AHUser
Hab mich da wohl verschrieben, es muss "\n" heißen und nicht '\n'. QStringList::join() erwartet einen String und kein Zeichen.
Verfasst: 2. Juli 2005 17:03
von slash-ex
verdammt, das hätt ich aber auch sehen müssen! stand ja auch da

Verfasst: 2. Juli 2005 17:12
von BartSimpson
Ist aber in machen Dokus aber schwer zu unterscheiden zwischen ' und "
Verfasst: 2. Juli 2005 17:53
von FlorianBecker
In welchen? In der Qt Doku steht das immer ganz klar finde ich.
Verfasst: 2. Juli 2005 18:01
von BartSimpson
Dort schon. Gott lob:) Aber in machen Bücher wird ganz gerne mal ' mit " verwechelt.
Verfasst: 2. Juli 2005 20:15
von slash-ex
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

Verfasst: 2. Juli 2005 20:19
von BartSimpson
Versuche es mal mit dem Signal readyReadStandardOutput () vom QProcess.
bzw readyReadStdout () unter QT3
Verfasst: 2. Juli 2005 20:39
von slash-ex
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() ) );
Verfasst: 2. Juli 2005 20:43
von BartSimpson
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() );
}
Verfasst: 2. Juli 2005 20:49
von slash-ex
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
Verfasst: 2. Juli 2005 20:56
von BartSimpson
Versuche es mal mit dem koregierten Posting. QProcess ist manchmal ziemlich verzwickt.
Verfasst: 2. Juli 2005 22:03
von slash-ex
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
