2

我有 2 个模型:( MyModelinherits QAbstractItemModel它的树) 和MyProxyModel( inherits QSortFilterProxyModel)。

MyModel 的列数为 1,MyModel 中的项目包含应使用 MyProxyModel 在 QTableView 中显示的信息。我将 MyProxyModel 与MyProxyModel::columnCount() == 5.

我重载了函数MyProxyModel::data()。但表格视图仅显示来自第 1 列(MyModel::columnCount)的数据。

调试后我发现MyProxyModel::data()它只获取索引column < MyModel::columnCount()(似乎它使用MyModel::columnCount()并忽略MyProxyModel::columnCount())。

在表视图标题部分计数等于MyProxyModel::columnCount()(没关系;))。

如何在单元格中显示信息column > MyModel::columnCount()

我的模型.cpp:

int MyModel::columnCount(const QModelIndex& parent) const
{
    return 1;
}

MyProxyModel.cpp:

int MyProxyModel::columnCount(const QModelIndex& parent) const
{
    return 5;
}

QVariant MyProxyModel::data(const QModelIndex& index, int role) const
{
    const int  r = index.row(),
                  c = index.column();
    QModelIndex itemIndex = itemIndex = this->index(r, 0, index.parent());
    itemIndex = mapToSource(itemIndex);
    MyModel model = dynamic_cast<ItemsModel*>(sourceModel());
    Item* item = model->getItem(itemIndex);
    if(role == Qt::DisplayRole)
    {
          if(c == 0)
          {
                return model->data(itemIndex, role);
          }
          return item->infoForColumn(c);
    }
    return QSortFilterProxyModel::data(index, role)
}
4

1 回答 1

1

正如 Krzysztof Ciebiera 所说,用不多的话来说:你的datacolumnCount方法永远不会被调用,因为它们没有正确声明。您应该实现的虚拟方法具有签名

int columnCount(const QModelIndex&) const;
QVariant data(const QModelIndex&, int) const;

虽然您的方法具有不同的签名

int columnCount(QModelIndex&) const;
QVariant data(QModelIndex&, int);

因此他们不会被调用。请注意,您的方法错误地期望对模型索引进行非常量引用。您的data()方法还需要非常量对象实例。

于 2012-06-26T23:39:00.010 回答