2015-12-29 58 views
2

在創建項目模型(例如通過繼承QAbstractItemModel)時,基本操作(如行插入和刪除旨在爲嵌套QAbstractItemModel中的嵌套操作

在實踐中,例如,必須立即致電::beginInsertRows(),然後立即致電::endInsertRows()?或者相反,是否允許以不同的參數調用::beginInsertRows()兩次,然後執行插入,然後調用相應的::endInsertRows()兩次?

我想知道,因爲當讀取QAbstractItemModel來源我observed操作是在堆棧的基礎上完成的。請注意0​​另一方面,d->changes沒有在其他地方使用,比在beginInsert/endInsert...等對功能。

+0

我不認爲你應該使用嵌套塊插入/刪除。一對beginInsertRows/endInsertRows就足夠了。您只需使用正確的參數來定義插入/移除的整行行。 – vahancho

回答

0

就我而言,我打破了向下插入,這樣我可以先做父項beginInsertRows/插入/endInsertRows序列,然後beginInsertRows/插入的子項/endInsertRows序列。

它似乎工作起來很好,但我有一些非常奇怪的錯誤,當我用我的自定義模型與QSortFilterProxyModel。經過幾個小時的修復我的模型中的微小不一致並越來越好(或更加理智)的結果之後,我被困在最後一個奇怪的行爲中,但卻跑出了我在哪裏尋找錯誤的想法。

然後,我想我會給另一種方法一個鏡頭:一個beginInsertRows,插入父母和他們的孩子,然後插入一個endInsertRows。令我驚訝的是,它工作得很好。最後,我可以在我的任務列表中勾選此血腥模型。


@vahancho,對不起,我以前的評論。由於我的急躁,我試圖讓我的自定義模型出現並誤解了您的問題,我感到很疲憊。您的評論實際上擁有正確的答案。