Ste*_*mer 5 c++ qt qtreeview qabstractitemmodel
我有一个QAbstractItemModel派生模型附加到 QTreeView
我想以编程方式将单行附加到树层次结构中某处的节点。
从我的角度来看,我有一个连接到信号的插槽。信号发送QModelIndex我想要追加新行的节点的 。在我beginInsertRows(...)使用它QModelIndex和新行的行号调用的插槽中,将新行附加到我的模型数据,然后调用endInsertRows():
传递给的值beginInsertRows(...)是父节点在追加新节点之前拥有的子行数。
也就是说,如果有 4 个子行,它们的行索引为 0、1、2 和 3。因此添加的新行号将为 4。
void Model::slotOnAddRow(QModelIndex parent, std::string key)
{
assert(parent.isValid());
Row& parent_row = *static_cast<Row*>(parent.internalPointer());
beginInsertRows(parent, parent_row.numChildren(), parent_row.numChildren());
parent_row.addChildRow(key);
endInsertRows();
}
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是在调用endInsertRows()我的视图后没有更新。
这是我的树视图的示例。
SPREAD_1.SPREAD_1 目前有 4 个子行:
inst_idLEG_1LEG_2LEG_3beginInsertRows(SPREAD_1, 4, 4);我就是这样做的,我的视图没有显示我的新行。
我知道此行存在在我的模型,因为如果我崩溃的SPREAD_1节点,然后重新展开它,我的新添加的行现在是可见:
AFAIKT 我已经正确地遵循了在线示例,但显然我遗漏了一些东西。
如何将新行附加到树节点并更新视图?
我是否需要发出信号或覆盖另一个基类方法?
像这样的问题表明模型中其他地方存在错误。如果没有看到模型的实现,就不可能说出在哪里。
使用模型测试对于诊断问题非常有帮助。
从字面上看,您所需要做的就是ModelTest用模型实例化一个实例
QTreeView(&_model);
ModelTest test(&_model);
Run Code Online (Sandbox Code Playgroud)
如果模型不符合,您将收到断言失败ModelTest
| 归档时间: |
|
| 查看次数: |
2618 次 |
| 最近记录: |