openPersistentEditor

时间:2016-08-19 08:38:25

标签: c++ qt

我正在尝试向tableView添加过滤和排序方法,为此我需要使用QSortFilterProxyModel。我的问题是,我使用QSortFilterProxyModel的女巫的初始模型需要表格的所有单元格已经在编辑器mod中打开。将QStandardItemModel添加到QSortFilterProxyModel后,单元格尚未处于可编辑模式。

这是按预期工作的:

QStandardItemModel *model = new QStandardItemModel(0, 5, this); //reimplemented class
QItemDelegate *mydelegate = new QItemDelegate(this); //reimplemented class

ui -> tableView -> setModel(model);
ui -> tableView -> setItemDelegate (mydelegate);

for(size_t i=0; i<m_BoardingsVector.size(); i++) //a structure from a function that adds rows dynamically
{
        model -> insertRows(model -> rowCount(),1);
        for(int j=0; j<5; ++j)
        ui -> tableView -> openPersistentEditor(model -> index(model -> rowCount() - 1, j));
}

仅当我双击细胞时才显示细胞。这意味着openPersistestentEditor的{​​{1}}方法无效。

tableView

1 个答案:

答案 0 :(得分:1)

我刚刚遇到这个问题,只是阅读你的问题和代码摘录让我意识到错误:

视图(ui->tableView)设置为使用一个模型(m_proxyModel),但编辑器的索引来自不同的模型(model)。这可能对视图没有任何意义。 1

更改:

ui -> tableView -> openPersistentEditor(model -> index(model -> rowCount() - 1, j));

为:

ui -> tableView -> openPersistentEditor(m_proxyModel -> index(model -> rowCount() - 1, j));

应该照顾好你的问题,我相信。

对我来说,它创建了一个不同的问题,编辑器没有显示在正确的单元格中,但是我的QAbstractProxyModel的子类实现可能有问题(通常不建议这样做)。


1 我对QAbstractItemView的{​​{3}}进行了简短的一瞥,但我还没有找到明确的限制,但这仍然是我能想到的最合理的解释。