即日起在codingBlog上分享您的技术经验即可获得积分,积分可兑换现金哦。

Qt qsqlquerymodel 里文显示乱码相关疑难问题处理

编程语言 i7891090 52℃ 0评论

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



转载请注明:CodingBlog » Qt qsqlquerymodel 里文显示乱码相关疑难问题处理

喜欢 (0)or分享 (0)
发表我的评论
取消评论

*

表情