想判断下客户端是否和服务器正常连接,使用waitForConnected判断是否连接超时,但是前面的 ui->textEdit_Recv->setText("正在连接")代码要等到 if(!socket->waitForConnected(3000))代码判断完成后才执行,这是为什么?
void MainWindow::on_pushButton_connect_clicked()
{
if((ui->pushButton_connect->text() == tr("连接")))
{
ui->textEdit_Recv->setText("正在连接");
QString IP;
int port;
//获取IP地址
IP=ui->lineEdit_IP->text();
//获取端口号
port=ui->lineEdit_Port->text().toInt();
//断开已有的连接
socket->abort();
//连接服务器
socket->connectToHost(IP,port);
//等待连接成功
if(!socket->waitForConnected(3000))
{
qDebug() << "Connection failed!";
return;
}
qDebug() << "Connect successfully!";
//发送按键使能
ui->pushButton_send->setEnabled(true);
//修改按键文字
ui->pushButton_connect->setText("断开连接");
}
else
{
//断开连接
socket->disconnectFromHost();
//修改按键文字
ui->pushButton_connect->setText("连接");
ui->pushButton_send->setEnabled(false);
}
}
因为waitForConnected是个阻塞方法,而setText以后是要在paintEvent里才会刷新界面的,你把ui线程阻塞了所以界面就不会刷新了。
简单的方法是在阻塞之前先用ui->textEdit_Recv->repaint()强制刷新重绘。
qt是一个异步为主的库,有ui程序的并不推荐使用阻塞方法,最好还是通过信号和槽来处理connect的结果。