使用QAbstractTableModel的简单范例

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中展示和编辑数据。

使用QAbstractTableModel的简单范例

创建自定义数据模型

1、继承QAbstractTableModel类

需要创建一个自定义的数据模型类,继承自QAbstractTableModel类,在这个类中,需要重写以下几个虚函数:

rowCount():返回表格中的行数。

columnCount():返回表格中的列数。

data():返回表格中指定位置的数据。

headerData():返回表格的表头数据。

使用QAbstractTableModel的简单范例

flags():返回表格单元格的属性。

setData():设置表格中指定位置的数据。

headerDataChanged():通知表格的表头数据已更改。

dataChanged():通知表格的数据已更改。

2、实现自定义数据模型类

下面是一个简单的自定义数据模型类的实现:

使用QAbstractTableModel的简单范例

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

(0)
K-seoK-seoSEO优化员
上一篇 2024年2月17日 22:57
下一篇 2024年2月17日 22:59

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

免备案 高防CDN 无视CC/DDOS攻击 限时秒杀,10元即可体验  (专业解决各类攻击)>>点击进入