QT 自定义模型继承QStrandardItemModel,重写data函数实例
时间: 2024-09-20 13:03:17 浏览: 60
在Qt中,`QStandardItemModel` 是一个内置的数据模型,用于处理表格数据,通常用于QTableView等视图控件。如果你想自定义这个模型并添加特定的行为,你可以通过继承 `QStandardItemModel` 来创建一个新的模型,并重写其中的关键方法,如 `data()` 函数。
当你重写 `data()` 函数时,你需要提供对数据的访问策略,这通常涉及到指定数据的角色(Role),比如 Qt::DisplayRole、Qt::EditRole 等,以及如何从模型内部获取对应行和列索引处的实际数据值。
下面是一个简单的例子:
```cpp
class CustomStandardItemModel : public QStandardItemModel
{
public:
explicit CustomStandardItemModel(QObject *parent = nullptr)
: QStandardItemModel(parent)
{}
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override {
if (!index.isValid() || !hasIndex(index.row(), index.column()))
return QVariant();
// 这里根据实际数据结构,获取对应位置的数据
auto item = item(index.row(), index.column());
if (role == Qt::DisplayRole)
return item.text(); // 返回显示文本
else if (role == Qt::DecorationRole) {
// 根据需要返回装饰图标
return QIcon(item.data(Qt::DecorationRole).toString());
}
// ... 其他可能的角色处理
// 如果找不到对应的role,返回默认值或错误信息
return QVariant();
}
private:
QStandardItem* item(int row, int column) {
// 实现获取item的具体逻辑,这里假设item是通过索引获取的
return static_cast<QStandardItem*>(findItem(row, column));
}
};
```
在这个例子中,`CustomStandardItemModel` 首先检查索引是否有效,然后根据传入的角色获取并返回相应的数据。`item()` 函数是自定义的部分,它负责根据提供的行和列找到对应的数据项。
阅读全文