本人原创
这里侧重的是文本乱码解决,适用于本地或者网络文本等字符传输的乱码解决,
对于标题栏的中文乱码解决方案,网上一搜一大堆,同一内容被N多人转载,遇到标题栏的乱码,请自己搜索,仿照解决
QString name = ui->le_name->text().toLocal8Bit();
QString message = ui->lineEdit->text().toLocal8Bit();
QDateTime dt;
QTime time;
QDate date;
dt.setTime(time.currentTime());
dt.setDate(date.currentDate());
QString dati = dt.toString("yyyy-MM-dd hh:mm:ss");
QString msg = dati+"/n"+name+":"+message;
emit sendmsg(msg);
此段是从界面文本输入框中获取输入,但是需要转换字符格式来进行发送。。。。。。重点在 toLocal8Bit();
//设置字号
QFont ft;
ft.setPointSize(12);
ui->tb_show->setFont(ft);
//设置颜色
QPalette pa;
pa.setColor(QPalette::Text,Qt::darkGreen);
ui->tb_show->setPalette(pa);
QByteArray qb = msg.toLatin1();
const char *mm = qb.data();
ui->tb_show->append(QString::fromLocal8Bit(mm,-1));
此段是收到消息端的界面上需要显示,若不处理,则显示的是乱码,先将收到的msg转换,msg.toLatin1(),然后进行传值给
const char *,显示的时候,QString::fromLocal8Bit(const char *str,int size = -1),所以这里建立const char *mm,
将mm传递进去即可
qs = ui->tb_show->toPlainText(); QString input;
input = qs+"/n";
ui->tb_show->clear();
if(qs == NULL)
{
return;
}
else
{
file.open(QIODevice::Append);
file.write(input.toLocal8Bit());//保存界面上显示的内容,需要转换编码格式
file.close();
}
特别声明:
由于本人一开始尝试如下代码失误,误认为是不可以的,特自己想出来上面的解决办法,
下面列出网络上最常用的乱码解决方案:
#include <QTextcodec> //这个不能少
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB2312"));// 1
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GB2312"));// 2
QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312"));// 3 如上三句是关键语句
Widget w;
w.setWindowTitle("tcpClient");
w.show();
return a.exec();
}