【解决】QT中使用TCP通信,可以接收信息但无法显示(使用)传输内容
背景
做点菜系统项目,有服务机和桌台机两个程序。当桌台机执行开始点菜、下单、结账的操作时会给服务机发送服务记录信息。发送信息使用TCP通信。
代码
.cpp:
#include "serverw.h" #include "ui_serverw.h" #include "QDebug" ServerW::ServerW(QWidget *parent) : QWidget(parent), ui(new Ui::ServerW) { ui->setupUi(this); port = "9999";//设置固定端口号 //登录,启动监听 orderserver.listen(QHostAddress::AnyIPv4,port.toShort()); //对接收到的信号做处理 connect(&orderserver,&QTcpServer::newConnection,this,&ServerW::new_connection); } ServerW::~ServerW() { delete ui; } void ServerW::new_connection(){ //获取连接的对象 QTcpSocket * orsersocket = orderserver.nextPendingConnection(); qDebug()<<"connect1"; connect(orsersocket,&QTcpSocket::readyRead,this,&ServerW::read_data);//接收信息-读取信息槽函数 } void ServerW::read_data(){ qDebug()<<"connect2"; QTcpSocket *sock = (QTcpSocket *)sender(); QString recodecon = QString(sock->readAll());//接收内容转成string qDebug()<<"recodecon:"<<recodecon;//测试是否接收到内容 ui->recodela->setText(recodecon);//将两个label内容改成接收内容 ui->detailla->setText(recodecon); ui->recodelist->addItem(recodecon);//右侧listwidget显示接收内容 this->setWindowTitle(recodecon);//标题修改 qDebug()<<"connect3"; qDebug()<< "detailla:"<<ui->detailla->text();//测试是否修改内容成功 qDebug()<< "title:"<<this->windowTitle();//显示标题名称 }
.h:
#ifndef SERVERW_H #define SERVERW_H #include <QWidget> #include <QTcpSocket> #include <QTcpServer> namespace Ui { class ServerW; } class ServerW : public QWidget { Q_OBJECT public: explicit ServerW(QWidget *parent = nullptr); ~ServerW(); QString port;//端口 private: Ui::ServerW *ui; QTcpServer orderserver; private slots: void new_connection(); void read_data(); }; #endif // SERVERW_H
.ui界面
在传输内容中,连接成功提示"connect1",接收到信息提示"connect2",修改信息成功提示"connect3"。将接收到的信息对窗口标题、“订单情况”“服务记录”label内容修改和右侧listwidget添加内容;并qdebug提示接收信息、窗口标题、“订单情况”的内容。
测试结果
输入数字:
输入文字:
输入回车\n:
有趣的是,居然显示空格后的内容:
排除其他因素
借用同学之前写的网络工具小项目测试一下,可以正常接收数据,分析一下代码。
后续
在解决的过程中,还发生了<QTcpServer><QTcpSocket>头文件无法找到的问题。在重新安装(原有程序依旧无法显示)和新建项目重写后可正常显示。
不过原有的问题依旧没有找到原因,如果有知道原因的朋友,可否在回复解答疑惑,感激不尽。