问题背景:

        今天在改进用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());

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐