" />
Qt:使用Model 您所在的位置:网站首页 qtreeview加载大量数据 Qt:使用Model

Qt:使用Model

2023-12-15 21:33| 来源: 网络整理| 查看: 265

#include "MyModel.h"

#include

MyModel::MyModel(int rowCount, int pageSize, QObject *parent) : QAbstractTableModel(parent) {

    this->m_pageSize = pageSize;

    this->m_rowCount = rowCount;

}

int MyModel::columnCount(const QModelIndex &parent) const {

    Q_UNUSED(parent);

    return 1; // 以一列为示例, 如果是多列, 则data list保存的应该是对象

}

int MyModel::rowCount (const QModelIndex &parent) const {

    Q_UNUSED(parent);

    return m_rowCount;

}

QVariant MyModel::data( const QModelIndex &index, int role) const {

    if (!index.isValid()) { return QVariant(); }

    if (Qt::DisplayRole == role) {

        int i = indexOfRow(index.row());

        return m_dataList.at(i);

    }

    return QVariant();

}

int MyModel::indexOfRow(int row) const {

    int page = row / m_pageSize; // 每页显示pageSize条记录

    if (!m_pageHash.contains(page)) {

        // 如果此面的数据不存在, 则读取数据到 data list里

        (const_cast(this))->fetchData(page);

    }

    return m_pageHash.value(page) + row % m_pageSize;

}

// 每次加载数据时,如果是耗时任务, 可以使用进度条显示加载进度

// 也可以取消加载, 但是这个时候data()函数中返回一个非有效的index

void MyModel::fetchData(int page) {

    int pageStartIndex = m_dataList.count(); // 存储此页码与其所对应的开始下标值

    m_pageHash.insert(page, pageStartIndex);

    // 例如在这里使用分页查询, 从数据库里读取数据

    for (int i = 0; i < m_pageSize; ++i) {

        int data = page * m_pageSize + i;

        m_dataList.append(data);

        // 快速拖动滚动条, 可以看到中间很多没必要的数据没有产生.

        qDebug()



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有