我有2个型号:MyModel
(inherits QAbstractItemModel
,它的树)和MyProxyModel
(inherits QSortFilterProxyModel
)。
MyModel的列数为1,并且MyModel中的项目包含应使用MyProxyModel在QTableView中显示的信息。我将MyProxyModel与MyProxyModel::columnCount() == 5
一起使用。
我重载了函数MyProxyModel::data()
。但是表 View 仅显示列1(MyModel::columnCount
)中的数据。
调试后,我发现MyProxyModel::data()
仅获得column < MyModel::columnCount()
的索引(似乎它使用MyModel::columnCount()
并忽略MyProxyModel::columnCount()
)。
在表格 View 标题部分中,计数等于MyProxyModel::columnCount()
(可以;)。
如何使用column > MyModel::columnCount()
在单元格中显示信息?
MyModel.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)
}
最佳答案
正如Krzysztof Ciebiera所说的那样,用不了那么多的话:永远不会调用您的data
和columnCount
方法,因为它们没有正确声明。您应该实现的虚拟方法具有签名
int columnCount(const QModelIndex&) const;
QVariant data(const QModelIndex&, int) const;
虽然您的方法具有不同的签名
int columnCount(QModelIndex&) const;
QVariant data(QModelIndex&, int);
这样他们就不会被叫。请注意,您的方法错误地期望对模型索引的非常量引用。您的
data()
方法还需要非常量对象实例。关于c++ - QSortFilterProxyModel和columnCount,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11206972/