我有一个窗口,其中包含QAbstractTableModel子类上的QTreeView(databaseTreeView
)(通过QSortFilterProxyModel)。
我有一个[添加]按钮,调用ui->databaseTreeView->model()->insertRow(ui->databaseTreeView->model()->rowCount());
。
我还有一个[Edit]按钮,它使用ui->databaseTreeView->selectionModel()->currentIndex();
将索引传递给编辑器窗口。
我想让[Add]按钮自动打开一个带有新创建项目索引的编辑器,但是在模型排序时,我不能使用插入行的行号。加insertRows()
只返回一个bool(索引对我的情况会更方便,所以我想知道是否有人可以告诉我如何获取新添加项目的索引)。
我愿意投入两三个小时,重构如果别无选择,但我认为它应该相当简单。我好奇地看着QAbstractItemModel::rowsInserted
信号,但这只返回我给出的行insertRows()
,并编辑了列表中的最后一项,无论它是否是刚添加的项目。
可以在https://github.com/megamasha/FlashKard找到完整的来源,供所有人仔细查看。
答案 0 :(得分:0)
http://doc.qt.nokia.com/4.7/qsortfilterproxymodel.html#details和 QSortFilterProxyModel充当原始模型的包装器。 “如果您需要将源QModelIndexes转换为已排序/已过滤的模型索引,反之亦然,请使用mapToSource(),mapFromSource(),mapSelectionToSource()和mapSelectionFromSource()。 ”
答案 1 :(得分:0)
好吧,似乎我设法回答了我自己的问题 - 我将自己的信号添加到模型类,并从addRows()
函数发送。然后我将它连接到相应窗口中的一个插槽,因此它可以创建一个编辑器作为其子节点。
我仍然有兴趣听到一些感觉不像是一个kludgey解决方案的建议 - 我觉得我应该能够使用预先存在的插槽来实现相同的目标。
我会看看mapToSource()
是否可以使用......