gpt4 book ai didi

c++ - QSortFilterProxyModel 和 columnCount

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:31:49 33 4
gpt4 key购买 nike

我有两个模型: MyModel ( inherits QAbstractItemModel ,它的树)和 MyProxyModel (inherits QSortFilterProxyModel)。

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

我重载了函数 MyProxyModel::data() .但 TableView 仅显示第 1 列 ( MyModel::columnCount) 中的数据。

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

在 TableView 标题部分计数等于 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)
}

最佳答案

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

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/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com