QAbstractTableModel是Qt框架中的一个抽象类,用于实现表格数据的存储和展示。通过继承QAbstractTableModel并重写相应的方法,可以实现自定义的表格模型。以下是一个简单的范例:,,``
python,from PyQt5.QtCore import QAbstractTableModel, Qt,,class SimpleTableModel(QAbstractTableModel):, def __init__(self, data):, super(SimpleTableModel, self).__init__(), self._data = data,, def rowCount(self, parent=None):, return len(self._data),, def columnCount(self, parent=None):, return len(self._data[0]) if self._data else 0,, def data(self, index, role=Qt.DisplayRole):, if not index.isValid() or role != Qt.DisplayRole:, return None, row, col = index.row(), index.column(), return self._data[row][col],
``
使用QAbstractTableModel的简单范例
QAbstractTableModel是Qt框架中的一个抽象类,它提供了一种通用的方式来管理数据模型,通过继承QAbstractTableModel类并实现其虚函数,可以创建自定义的数据模型,用于在Qt的表格控件(如QTableView)中显示和编辑数据,本文将介绍如何使用QAbstractTableModel创建一个简单的数据模型,并在QTableView中展示和编辑数据。
创建自定义数据模型
1、继承QAbstractTableModel类
需要创建一个自定义的数据模型类,继承自QAbstractTableModel类,在这个类中,需要重写以下几个虚函数:
rowCount():返回表格中的行数。
columnCount():返回表格中的列数。
data():返回表格中指定位置的数据。
headerData():返回表格的表头数据。
flags():返回表格单元格的属性。
setData():设置表格中指定位置的数据。
headerDataChanged():通知表格的表头数据已更改。
dataChanged():通知表格的数据已更改。
2、实现自定义数据模型类
下面是一个简单的自定义数据模型类的实现:
include <QAbstractTableModel> include <QList> include <QVariant> class MyTableModel : public QAbstractTableModel { Q_OBJECT public: MyTableModel(QObject *parent = nullptr); int rowCount(const QModelIndex &parent = QModelIndex()) const override; int columnCount(const QModelIndex &parent = QModelIndex()) const override; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; Qt::ItemFlags flags(const QModelIndex &index) const override; bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override; bool insertRows(int position, int rows, const QModelIndex &index = QModelIndex()) override; bool removeRows(int position, int rows, const QModelIndex &index = QModelIndex()) override; bool moveRows(int sourceRow, int sourceParent, int destinationRow, int destinationParent, const QModelIndex &index = QModelIndex()) override; private: QList<QStringList> m_data; };
使用自定义数据模型
1、在主窗口中添加表格控件
在主窗口中添加一个QTableView控件,用于展示和编辑数据,将自定义数据模型设置为QTableView的模型:
include "mytablemodel.h" include <QTableView> include <QVBoxLayout> include <QWidget> include <QPushButton> include <QApplication> include <QHeaderView> include <QInputDialog> include <QMessageBox> include <QDebug> include <QFile> include <QTextStream> include <QJsonDocument> include <QJsonObject> include <QJsonArray> include <QStandardItemModel> include <QStandardItem>
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { m_ui.setupUi(this); m_ui.tableView->setModel(&m_tableModel); // 将自定义数据模型设置为QTableView的模型 }
2、加载和显示数据
在构造函数中,从文件中读取JSON数据,并将其加载到自定义数据模型中:
// 从文件中读取JSON数据并加载到自定义数据模型中 void MainWindow::loadData() { QFile file("data.json"); // JSON文件名和路径根据实际情况修改 if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) return; // 打开文件失败则直接返回 QTextStream in(&file); // 将文件内容读入到文本流中 QString jsonStr = in.readAll(); // 读取所有文本内容并存储为字符串变量jsonStr中 file.close(); // 关闭文件指针,释放资源 m_tableModel.setData(m_tableModel.index(0, 0), jsonStr); // 将JSON字符串设置为第一行第一列的数据单元格内容 }
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/321626.html