[gelöst] qstringlist -> qstring

Alles rund um die Programmierung mit Qt
slash-ex
Beiträge: 239
Registriert: 30. März 2005 21:40

[gelöst] qstringlist -> qstring

Beitrag 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.
AHUser
Beiträge: 27
Registriert: 29. Juni 2005 17:45

Beitrag von AHUser »

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 »

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 »

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 »

verdammt, das hätt ich aber auch sehen müssen! stand ja auch da :twisted:
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

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 »

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 »

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 »

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 »

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 »

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 »

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 »

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 »

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 »

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
Antworten