问题背景

​ 今天在改进用Qt写的TCP服务器和客户端代码时,想将服务器tcpServer的端口号作为数据发送给客户端,并且需要转为Utf8格式。遇到一个问题,调用TcpSocket中的write(const QByteArray &data)方法,write方法的参数列表中需要填入的参数类型是QByteArray,但tcpServer的serverPort()是一个quint16类型。

    问了一下chatGPT,给出的方案是,先将quint转为QTextCodec再转为QByteArray。但我使用的Qt版本是Qt6,已经弃用了QTextCodec。

问题思考和解决方法

​ 需要解决上述问题,那么就需要将quint16转为QByteArray类型,想法是:首先调用QString的number(int num)方法,将quint16转为QSting,再调用QByteArray的toUtf8()将QString转为QByteArray。

    具体代码:

    quint16 input = this->tcpServer->serverPort();
    QString str = QString::number(input);                //一定要用number转化  不然乱码
    QByteArray bytes = str.toUtf8();

上述代码为了写成一行放在tcpSocket的write方法的参数列表里,改成

QByteArray(QString::number(this->tcpServer->serverPort()).toUtf8())

具体为:

tmpTcpSocket->write(QByteArray(QString::number(this->tcpServer->serverPort()).toUtf8()) + " : " + ui.sendEdit->text().toUtf8());