【解决】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>头文件无法找到的问题。在重新安装(原有程序依旧无法显示)和新建项目重写后可正常显示。

不过原有的问题依旧没有找到原因,如果有知道原因的朋友,可否在回复解答疑惑,感激不尽。

 

posted @ 2022-08-06 10:59  石绿  阅读(561)  评论(0)    收藏  举报