1

我有一个窗口,其中包含databaseTreeViewQAbstractTableModel 子类上的 QTreeView ()(通过 QSortFilterProxyModel)。我有一个 [Add] 按钮,它调用ui->databaseTreeView->model()->insertRow(ui->databaseTreeView->model()->rowCount());. 我还有一个 [Edit] 按钮,用于ui->databaseTreeView->selectionModel()->currentIndex();将索引传递给编辑器窗口。

我想让 [Add] 按钮自动打开一个带有新创建项目索引的编辑器,但是随着模型的排序,我不能使用插入行的行号。PlusinsertRows()只返回一个布尔值(对于我的情况,索引会更方便,所以我想知道是否有人可以告诉我如何获取新添加项目的索引)。

我愿意花两三个小时来做​​,如果没有其他选择就重构,但我认为它应该相当简单。我好奇地看着QAbstractItemModel::rowsInserted信号,但这只是返回我给的行insertRows(),并编辑列表中的最后一项,不管它是否是刚刚添加的项目。

可以在https://github.com/megamasha/FlashKard找到完整的源代码,任何人都可以仔细查看。

4

2 回答 2

0

http://doc.qt.nokia.com/4.7/qsortfilterproxymodel.html#detailsQSortFilterProxyModel 充当原始模型的包装器。“如果您需要将源 QModelIndexes 转换为排序/过滤模型索引或反之亦然,请使用 mapToSource()、mapFromSource()、mapSelectionToSource() 和 mapSelectionFromSource()。

于 2012-03-06T13:40:25.430 回答
0

好吧,看来我设法回答了我自己的问题——我将自己的信号添加到模型类中,并从addRows()函数中发送。然后我将它连接到适当窗口中的一个插槽,这样它就可以创建一个编辑器作为它的子级。

我仍然有兴趣听到那些感觉不像是一个笨拙的解决方法的建议 - 我觉得我应该能够使用预先存在的插槽来实现相同的目标。

我看看mapToSource()能不能用。。。

于 2012-03-06T15:07:33.180 回答