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

在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”字段的内容并显示



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值