Qt入门学习小记——UDP收发解决汉字乱码问题
2015-04-26 16:44
411 查看
本文主要记录Qt入门学习中的一些发现和问题,大神们见笑。
在看霍亚飞的Qt入门教程时,使用Qt5.4做简单的通讯实验,在显示汉字方面发现了问题,在网上找到的几种方法都是在发送前将Qstring转化成Latin1放入QByteArray中,不过在接收端都显示??乱码,似乎在Qt5.4中并不适用,最后通过使用
QByteArray datagram = messagetosend.toUtf8().data();
代替
QByteArray datagram = messagetosend.toLatin1();
解决了这个问题,使得接收端可以正常显示汉字
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
sender = new QUdpSocket(this);
receiver = new QUdpSocket(this);
port = 45454;
//设置接收端口
receiver->bind(port,QUdpSocket::ShareAddress);
//关联接收信号和信号处理函数
connect(receiver,SIGNAL(readyRead()),
this,SLOT(processPendingDatagram()));
//显示本机ip
ui->ip_locolhostlabel->setText(getip());
}
Widget::~Widget()
{
delete ui;
}
//ip获取函数
QString Widget::getip()
{
QList<QHostAddress> list = QNetworkInterface::allAddresses();
foreach (QHostAddress address, list)
{
if(address.protocol() == QAbstractSocket::IPv4Protocol)
{
if(address.toString().contains("127.0.")||
address.toString().contains("169.254."))
continue;
return address.toString();
}
//我们使用 IPv4 地址
}
return 0;
}
//信息发送函数
void Widget::on_pushButton_clicked()
{
//获取端口号
int port = ui->lineEdit_port->text().toInt();
//获取目标ip地址
QString targetip = ui->lineEdit_targetip->text();
//将输入信息转化为字符串
QString messagetosend = ui->textEdit_msgsend->toPlainText();//最好不超过512个字节
//将QString转化为字节列格式
//QByteArray datagram = messagetosend.toLatin1();//我在Qt5.4版本转换成latin1实验多次总出现乱码
//关键的转换步骤,在Qt5.4中转化成utf8可以实现汉字正确显示
QByteArray datagram = messagetosend.toUtf8().data();
sender->writeDatagram(datagram.data(),datagram.size(),QHostAddress(targetip),port);
ui->textEdit_msgsend->clear();
}
void Widget::processPendingDatagram()
{
QByteArray datagram;//用于存放接收的数据报
datagram.resize(receiver->pendingDatagramSize());
receiver->readDatagram(datagram.data(),datagram.size());
//将utf8格式转换回字符串类型
QString str = QString::fromUtf8(datagram.data());
ui->textEdit_msgrec->append(str);
}
在看霍亚飞的Qt入门教程时,使用Qt5.4做简单的通讯实验,在显示汉字方面发现了问题,在网上找到的几种方法都是在发送前将Qstring转化成Latin1放入QByteArray中,不过在接收端都显示??乱码,似乎在Qt5.4中并不适用,最后通过使用
QByteArray datagram = messagetosend.toUtf8().data();
代替
QByteArray datagram = messagetosend.toLatin1();
解决了这个问题,使得接收端可以正常显示汉字
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
sender = new QUdpSocket(this);
receiver = new QUdpSocket(this);
port = 45454;
//设置接收端口
receiver->bind(port,QUdpSocket::ShareAddress);
//关联接收信号和信号处理函数
connect(receiver,SIGNAL(readyRead()),
this,SLOT(processPendingDatagram()));
//显示本机ip
ui->ip_locolhostlabel->setText(getip());
}
Widget::~Widget()
{
delete ui;
}
//ip获取函数
QString Widget::getip()
{
QList<QHostAddress> list = QNetworkInterface::allAddresses();
foreach (QHostAddress address, list)
{
if(address.protocol() == QAbstractSocket::IPv4Protocol)
{
if(address.toString().contains("127.0.")||
address.toString().contains("169.254."))
continue;
return address.toString();
}
//我们使用 IPv4 地址
}
return 0;
}
//信息发送函数
void Widget::on_pushButton_clicked()
{
//获取端口号
int port = ui->lineEdit_port->text().toInt();
//获取目标ip地址
QString targetip = ui->lineEdit_targetip->text();
//将输入信息转化为字符串
QString messagetosend = ui->textEdit_msgsend->toPlainText();//最好不超过512个字节
//将QString转化为字节列格式
//QByteArray datagram = messagetosend.toLatin1();//我在Qt5.4版本转换成latin1实验多次总出现乱码
//关键的转换步骤,在Qt5.4中转化成utf8可以实现汉字正确显示
QByteArray datagram = messagetosend.toUtf8().data();
sender->writeDatagram(datagram.data(),datagram.size(),QHostAddress(targetip),port);
ui->textEdit_msgsend->clear();
}
void Widget::processPendingDatagram()
{
QByteArray datagram;//用于存放接收的数据报
datagram.resize(receiver->pendingDatagramSize());
receiver->readDatagram(datagram.data(),datagram.size());
//将utf8格式转换回字符串类型
QString str = QString::fromUtf8(datagram.data());
ui->textEdit_msgrec->append(str);
}
相关文章推荐
- Qt 国际化编程,真正解决汉字显示方块、乱码问题!
- QT学习笔记----解决QT无法显示汉字问题
- QT中汉字乱码解决方案,解决汉字乱码问题
- Qt 国际化编程解决汉字显示方块、乱码问题!
- qt读取txt文件 ,解决汉字乱码问题
- QT学习笔记----解决QT无法显示汉字问题
- qt读取txt文件 ,解决汉字乱码问题
- QT学习——qt creator修改程序编码(解决中文乱码问题)的方法
- JSP+Servlet学习经验1:解决form表单提交后相应页面中文乱码的问题
- QT5.2中文乱码解决问题
- Struts(2)Struts快速入门案例和使用filter配合Struts,解决中文乱码问题
- cocos2d-x-3.1 国际化strings.xml解决乱码问题 (coco2d-x 学习笔记四)
- 解决js输出汉字乱码的问题
- QT之解决按钮显示中文乱码问题
- VS和Qt之解决在控制台下输出中文乱码问题
- Jsoncpp 中文汉字unicode乱码解决及标点问题解决
- qtcpsocket调用write和read函数写数据乱码问题解决方法
- Qt qsqlquerymodel 中文显示乱码问题解决
- Java Web入门学习(四)Eclipse与Maven、Tomcat整合配置 (重整版并解决问题)
- Qt技巧:中文显示乱码问题解决