QSqlTableModel设置字段显示顺序,实现自定义排序与显示

QSqlTableModel设置字段显示顺序,实现自定义排序与显示

  • 需求明确
    • QSqlTableModel简介与使用方法
      • 具体实现

有问题待完善!!!!!!!

需求明确

在做一个数据库模块时,遇到要用户要对显示进行自定义操作,也就是在QSqltablemodel绑定tableview后,不按照默认的字段显示
用过QSqltablemodel的应该都知道,比较方便,但是问题就是没有提供字段显示修改的接口,然后开始我们自定义QSqltablemodel来实现此功能

QSqlTableModel简介与使用方法

查询设置:

//查询:

model = new QSqlTableModel(this);
model->setTable(“student”);
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
model->select(); //选取整个表的所有行
ui->tb_ElementHisData->setModel(model);

条件查询:

//条件:(等价于SQL语句的where)

model->setFilter("order by time desc"); //根据姓名进行筛选
model->select(); //显示结果

排序查询:

排序:(等价于ORDERBY)
model->setSort(0,Qt::AscendingOrder); //id属性,即第0列,升序排列
model->select();
model->setSort(0,Qt::DescendingOrder); //id属性,即第0列,降序排
model->select();

这些网上都有写,不详细说明了

具体实现

要实现自定义的Qsqltablemodel,首先要找到他所调用显示的接口
QString selectStatement() const
找到具体接口后,我们根据接口具体实现,来重写该接口

代码实现:

class LogModel : public QSqlTableModel
{

public:
    LogModel(QObject * parent = 0, QSqlDatabase db = QSqlDatabase()):QSqlTableModel(parent, db)
    {

    }

    void setSelectSort(QString str)
    {
        m_SelectSort = str;
    }
protected:
    QString selectStatement() const
    {
        //返回需要显示的字段和设置字段顺序
        return m_SelectSort;
    }

    QString m_SelectSort;
};
class b
{
  LogModel *model;
}
model = new LogModel(ui->tb_ElementHisData, m_GlobalVar.m_HisDataDb->getDatabase());  //初始化表格模型
QString str = "SELECT \"";
    for (int i = 0; i <table_key.size();i++)
    {
        str+=table_key.at(i)+"\",\"";
    }
    str.chop(2);
    str+=" FROM HisElementData";
    qDebug()<<str;
    model->setSelectSort(str);```
    model->select();
    ui->tb_ElementHisData->setModel(model);

这里的 \ "是为了转义成” “, 因为我的字段名字带有了As ,In与数据库关键字有冲突,所以做了特殊处理,详情请看我另外一篇文章。

在这里我们每次显示只需要修改table_key里的字段顺序,就可以进行排序显示,每次记得清空表头记得表头对应!chop(2)是为了去除最后的, ” 有什么不理解的可以在下方评论

你可能感兴趣的:(QT,sqlite,c++,sqlite,qt,c++)