从json数组构造QAbstractTableModel子类,快速绘制QTableView

一般的,QSqlTableModel可以关联数据库的一张表,QTableView对象通过setModel,关联这个model对象,这样,编码上很方便能将QTableView展示成数据库表的样式。

但是如果数据来源不是数据库表,而是json数组,则需要继承QAbstractTableModel,然后再让tableview->setModel。

下文的AbsTblMdlJsonArray就简易地实现了这个功能。

#pragma once
#include <memory>
#include <QAbstractTableModel>
#include <QJsonArray>

class AbsTblMdlJsonArray : public QAbstractTableModel {
public:
	AbsTblMdlJsonArray(const QJsonArray &src, QObject *parent = Q_NULLPTR);
	int	columnCount(const QModelIndex &parent = QModelIndex()) const override;
	QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
	//QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override;
	//QModelIndex parent(const QModelIndex &index) const override;
	int	rowCount(const QModelIndex &parent = QModelIndex()) const 
QTableView 是 Qt 开发中的一个控件,它通常配合 QAbstractTableModel 使用,用于显示表格数据。如果你想在 QAbstractTableModel 中更改特定单元格的颜色,你需要通过以下几个步骤操作: 1. 实现 `QAbstractTableModel` 的 `data()` 和 `flags()` 方法:这两个方法分别返回单元格的数据值和标志(如是否可以编辑)。在 `data()` 方法中,你可以检查索引来决定是否以及如何改变颜色。 ```cpp virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override { if (role == Qt::BackgroundRole && conditionToChangeColor(index)) { // 条件判断 return QColor("your_color"); // 设置新的背景色,例如红色 } // 其他处理... } ``` 2. 定义 `conditionToChangeColor()` 函数:这是你自定义的逻辑,根据实际需求判断何时改变颜色,比如当某个条件满足时。 ```cpp bool conditionToChangeColor(const QModelIndex &index) const { // 根据 index 列和行的值判断,例如 index.column() 和 index.row() return columnValue(index.column()) > some_threshold; // 某列数值大于某个阈值 } // 这里只是一个示例,可能需要根据实际情况调整 int columnValue(int column) const { // 获取模型数据并计算对应列的值 } ``` 3. 更新视图:当你修改了数据,需要通知 QTableView 更新视图,可以使用 `beginResetModel()`、`endResetModel()` 或者直接修改数据然后触发 `emit dataChanged(index)`。 ```cpp void updateCellColor(QModelIndex index) { emit dataChanged(index, index); } ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值