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 :oops:
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 :twisted:

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

Code: Alles auswählen

    while(prc.isRunning() )
    {
    } 
diese schleife mitlaufen? warum verändert das das verhalten?

auf jeden fall erstmal danke :D