QSqlQueryModel重写data自定义tableview显示方式

在用QSqlQueryModel绑定tableview控件时,往往会遇到数据库里存储的数据与你table表里展现的数据不太一样,比如数据库里存储的0-1,tableview展现的是男-女;数据库里存储的日期+时间,而你只想日期,这时候需要重写QSqlQueryModel的data()函数;要让某列数据数据可编辑,比如学号可复制,需要重写flags方法

mysqlquery.h文件


#ifndef MYSQLQUERY_H
#define MYSQLQUERY_H

#include <QObject>
#include <QSqlQueryModel>

class MySqlQuery : public QSqlQueryModel
{
public:
    MySqlQuery(QObject *parent);

    QVariant data(const QModelIndex &item, int role=Qt::DisplayRole) const;
    Qt::ItemFlags flags(const QModelIndex &index) const;

private:

};

#endif // MYSQLQUERY_H

mysqlquery.cpp文件

#pragma execution_character_set("utf-8")
#include "mysqlquery.h"

#include <QSqlQuery>
#include <QDebug>
MySqlQuery::MySqlQuery(QObject *parent) : QSqlQueryModel(parent)
{

}
//
Qt::ItemFlags MySqlQuery::flags(
       const QModelIndex &index) const //返回表格是否可更改的标志
{
    Qt::ItemFlags flags = QSqlQueryModel::flags(index);
    if (index.column()!=6&&index.column()!=7) //可编辑状态
       flags |= Qt::ItemIsEditable;
    return flags;
}
//更改数据显示样式-性别-出生日期
QVariant MySqlQuery::data(const QModelIndex &index, int role) const
{

    QVariant value=QSqlQueryModel::data(index,role);

    if(role==Qt::DisplayRole &&index.column()==4)
    {
        value=((value.toInt()==0)?"男生":"女生");
        //qDebug()<<value.toInt();
        return value;

    }
    if(role==Qt::DisplayRole &&index.column()==5)
    {
        value=value.toString().mid(0,10);
        return value;
    }
    return value;

}

调用的时候,只需将QSqlQueryModel *model = new QSqlQueryModel(this);写成MySqlQuery *model=new MySqlQuery(this);即可

自带效果:

重写之后效果如下:
 

Qt 之 QSqlQueryModel Class详解参考https://blog.csdn.net/heaven_evil/article/details/77824578 

猜你喜欢

转载自blog.csdn.net/kangshuaibing/article/details/85160683