model/view 朱雀 2022-04-11 11:25 212阅读 0赞 MyModel.h #ifndef MYMODEL_H #define MYMODEL_H #include <QAbstractTableModel> #include <QHash> #include <QList> class MyModel : public QAbstractTableModel { public: explicit MyModel(int rowCount = 1000, int pageSize = 10, QObject *parent = 0); virtual int columnCount(const QModelIndex &parent = QModelIndex()) const; virtual int rowCount(const QModelIndex &parent = QModelIndex()) const; virtual QVariant data( const QModelIndex &index, int role = Qt::DisplayRole) const; private: QHash<int, int> m_pageHash; // key是页码值, value是此页的第一项数据在dataList中的下标值 QList<int> m_dataList; // 存储数据的容器 int m_pageSize; // 每页显示的数据量 int m_rowCount; // 要显示的行数 // 这个下标是有规律可寻的, 但是是无序的. // 同一页码中的数值的下标是有序的, 不同页码的数据之间是无序的. int indexOfRow(int row) const; // 读取数据, 可是以模拟生成的, 实际工程中很可能是从数据库中动态读取 void fetchData(int page); }; #endif // MYMODEL_H MyModel.cpp #include "MyModel.h" #include <QDebug> 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<MyModel *>(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() << data; } } Widget.h #ifndef WIDGET_H #define WIDGET_H #include <QWidget> namespace Ui { class Widget; } class Widget : public QWidget { Q_OBJECT public: explicit Widget(QWidget *parent = 0); ~Widget(); private: Ui::Widget *ui; }; #endif // WIDGET_H Widget.cpp #include "Widget.h" #include "ui_Widget.h" #include "MyModel.h" Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); MyModel *model = new MyModel(10000000, 1, this); ui->tableView->setModel(model); ui->tableView->horizontalHeader()->setStretchLastSection(true); } Widget::~Widget() { delete ui; } Widget.ui <?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"> <class>Widget</class> <widget class="QWidget" name="Widget"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>400</width> <height>390</height> </rect> </property> <property name="windowTitle"> <string>Widget</string> </property> <layout class="QGridLayout" name="gridLayout"> <item row="0" column="0"> <widget class="QTableView" name="tableView"/> </item> </layout> </widget> <layoutdefault spacing="6" margin="11"/> <resources/> <connections/> </ui> ![20181205235332417.png][] ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MDU2OTk5MQ_size_16_color_FFFFFF_t_70][] [20181205235332417.png]: /images/20220411/83a66959f4a943a6a40e78fc29024323.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MDU2OTk5MQ_size_16_color_FFFFFF_t_70]: /images/20220411/bad2dc3da4564f79bfb4d1c41f6e5fe1.png
相关 flask_admin源码---ModelView 目录 1.1:增加操作: 1.2: 修改操作: 1.3:查看详情操作: 1.4:删除操 淡淡的烟草味﹌/ 2022年09月12日 14:50/ 0 赞/ 227 阅读
相关 Android OpenGL ES 开发教程(16):Viewing和Modeling(MODELVIEW) 变换 Viewing和Modeling 变换关系紧密,对应到相机拍照为放置三角架和调整被拍物体位置及角度,通常将这两个变换使用一个modelview 变换矩阵来定义。对于同一个坐标变 柔情只为你懂/ 2022年08月10日 18:59/ 0 赞/ 194 阅读
相关 glGetDoublev(GL_MODELVIEW_MATRIX, modelview);和glGetDoublev(GL_PROJECTION_MATRIX, projection);结果是单位矩阵 今天用glGetDoublev(GL\_MODELVIEW\_MATRIX, modelview); glGetDoublev(GL\_PROJECTION\_MATRIX 叁歲伎倆/ 2022年06月06日 02:14/ 0 赞/ 421 阅读
还没有评论,来说两句吧...