Qt qsqlquerymodel 中文显示乱码问题解决

xiaoxiao2021-02-28  53

在QT数据库编程过程中,碰到了中文乱码的问题,最终解决了

在Qt5将中文改成utf-8后默认是可以正常显示的,所以中文乱码就要看你的数据库中保存的数据是什么编码,如果是utf-8,那就要检查你自己的Qt creator的配置,是不是默认utf-8的编码。如果不是可以通过重写QMySQlQueryModel::data函数来实现

.h文件:

class QMyQueryModel:publicQSqlQueryModel

{ public: explicit QMyQueryModel(); public: QVariant data(const QModelIndex &index, int role) const; protected: };

.cpp文件

QMySQlQueryModel::QMySQlQueryModel():QSqlQueryModel()

{ } QVariant QMySQlQueryModel::data(const QModelIndex &item, int role) const { //解决model中文字不能居中 QVariant value = QSqlQueryModel::data(item, role); if(role == Qt::TextAlignmentRole ) { value = (Qt::AlignCenter); return value; } //修改model的编码格式,解决model,view乱码问题 if(role == Qt::DisplayRole) { QTextCodec *tc1 = QTextCodec::codecForName("iso-8859-1"); QTextCodec *tc2 = QTextCodec::codecForName("GBK"); QByteArray data= tc1->fromUnicode(value.toString()); return tc2->toUnicode(data); } return value; }

就是在role为DisplayRole时,将显示的格式修改即可,我这边读取的是别人家的数据库,编码格式是"iso-8859-1"格式,把转换后的return即可。

当需要单独显示某一个字段时,可以自己写一个转换函数,显示的时候调用转换函数

//转换函数

QString openCountNotice::iso88591_to_gbk(QStringconst &src)

{ QTextCodec *tc1 = QTextCodec::codecForName("iso-8859-1"); QTextCodec *tc2 = QTextCodec::codecForName("GBK"); QByteArray data = tc1->fromUnicode(src); return tc2->toUnicode(data); }

显示时调用即可:

newlabel5->setText((iso88591_to_gbk(openCountSqlModel->record(row).value("FT").toString())));//获取第几row行“FT”字段的内容并显示

转载请注明原文地址: https://www.6miu.com/read-45851.html

最新回复(0)