Domanda

Sto cercando di cambiare un determinato messaggio di casella di testo. Visualizzerà il mio output.

Questo è quello che ho nel mio TCPClient ()

#include "form2.h"....string recvMSG = "random";    
QString s1 = QString::fromLocal8Bit(recvMSG.c_str());

182 :: Form2 :: changeOutput (s1);

within my form2.h I have:

...
void Form2::changeOutput(QString &s)
{
    output_box.setText(s1);
}
...

Nel mio principale:

#include <qapplication.h>
#include "form2.h"
#include <string.h>     /* for memset() */
#include <iostream>
#include <stdlib.h>     /* for atoi() and exit() */

int main( int argc, char ** argv )
{
    QApplication a( argc, argv );
    Form2 w;
    w.show();
    a.connect( &a, SIGNAL( lastWindowClosed() ), &a, SLOT( quit() ) );
    return a.exec();
}

Ora, so che dovrei chiamare w.changeOutput (s1). Ma il problema è che w non è dichiarato nel mio TCPClient.cpp ...

QT ha creato la funzione main () per me. Non sono sicuro di come risolvere questo problema. Voglio poter chiamare w.changeOutput (s1) dal mio TCPClient.cpp.

Questo è l'errore che sto ricevendo. TCPClient.cpp: 182: errore: impossibile chiamare la funzione membro "virtual void Form2 :: changeOutput (std :: string)" senza oggetto

Grazie.

È stato utile?

Soluzione

Se ho capito correttamente il problema, penso che il corretto "Qt-way" sarebbe fare in modo che il client TCP invii un segnale quando riceve un messaggio, quindi nella tua funzione principale connetti quel segnale allo slot changeOutputs.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top