在用QSqlQueryModel绑定tableview控件时,展示数据很方便。但是往往会遇到数据库里存储的数据与你table表里展现的数据不太一样,比如数据库里存储的是某个字符串的id值,tableview展现的是这个字符串对应的设备名称,这个时候需要重写QSqlQueryModel的data()函数,使得某列数据数据可编辑
头文件
#ifndef SQLQUERY_H
#define SQLQUERY_H
#include <QObject>
#include <QSqlQueryModel>
class SqlQuery : public QSqlQueryModel
{
public:
SqlQuery(QObject *parent);
QVariant data(const QModelIndex &item, int role=Qt::DisplayRole) const;
Qt::ItemFlags flags(const QModelIndex &index) const;
private:
};
#endif // SQLQUERY_H
cpp文件
#include "sqlquery.h"
#include <QSqlQuery>
#include <QDebug>
SqlQuery::SqlQuery(QObject *parent) : QSqlQueryModel(parent)
{
}
//
Qt::ItemFlags SqlQuery::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()==1)
{
//拿value值与你业务逻辑代码进行比较
//qDebug()<<value.toInt();
return value;
}
return value;
}