Pergunta

I created a connection between server and client, the connection works fine in console, but i coudn't connect my QTcpServer class to GUI with signals and slots. Here is my code :

ServerTCP.cpp

ServerTcp :: ServerTcp (QWidget *parent)
{
    listen(QHostAddress::Any,4000);
    QObject:: connect(this, SIGNAL(newConnection()),
    this, SLOT(connectionRequest()));
}

void ServerTcp :: connectionRequest()
 {

    emit IHM_connection(); 
    clientConnection = nextPendingConnection();

    QObject:: connect(clientConnection, SIGNAL(readyRead()),
    this, SLOT(read()));
}

void ServerTcp::read()
{

    QString ligne;
    while(clientConnection->canReadLine())    
    {
        ligne = clientConnection->readLine(); 
        emit IHM_text(ligne);           
    }
    QTextStream text(clientConnection);      


}

ManinWindow.cpp

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QObject::connect(&server,SIGNAL(IHM_connetion()),this,SLOT(connectionRequested()));
    QObject::connect(&server,SIGNAL(read(QString)),this,SLOT(print_text(QString)));
}



void MainWindow::on_quitButton_clicked()
{
    qApp->quit();
}

void MainWindow::print_text(QString text){
     ui->log->append("message : " + text);
}

void MainWindow::connectionRequested(){
    ui->log->append("connection OK!");
}

MainWindow::~MainWindow()
{
    delete ui;
}
Foi útil?

Solução

You have a typo in connect method: IHM_connetion

QObject::connect(&server,SIGNAL(**IHM_connetion**())

while the emitted signal is:

 emit IHM_connection()

QObject:connect returns a bool value which indicates if signal-slot connection was successful. Checking this value (for example, with Q_ASSERT) is a good practice and can save you a lot of time in case of typos like this. .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top