簡體   English   中英

如何在 Qt 模型/視圖的不同項目上重現相同的操作(復制、粘貼等)?

[英]How to reproduce the same operations (Copy, Paste, ...) on different items of a Qt Model/View?

我有一個自定義QTreeView並用自定義QStandardItems填充它。 model 是一個經典的QStandardItemModel

我希望有可能在 Tree 中重復相同的項目 這意味着如果我更改項目的某些屬性(例如:文本)或者如果我更改其子項的某些屬性,這些更改將重復到相應的項目。

多次使用同一個 QStandardItem 會很棒,但我發現這是不可能的。

也許我想要的一些圖片可以澄清我的意思:

  • 初始點:

在此處輸入圖像描述

  • B1 項已重命名,其他 B1 項的名稱也會自動更改:

在此處輸入圖像描述

  • B1 的 C1 物品被移動並且這個移動會自動復制到另一個 B1 物品上:

在此處輸入圖像描述

到目前為止我的解決方案

  • 每次更改項目時,我檢查(通過查看存儲在項目數據中的特定鍵)是否有任何其他項目等於此
  • 如果是這樣,我從更改的項目中復制數據。 對於孩子們,我從第二個項目中刪除了所有的孩子,從更改的孩子中復制每個孩子(創建新項目)並將它們附加到第二個項目。

此解決方案有效,但存在 2 個問題:

  • 我不喜歡
  • 當有太多孩子(他們可能是 2000-3000)並且一個項目重復兩次以上時,它會很慢。
  • 有些極端情況可能會出現(奇怪的)問題

一定有更好的方法,但我沒有找到。

您自己發現了問題:您的 model 中的數據是重復的,對於這種情況, QStandardItemModel不是一個好的解決方案。

您可以使用從QAbstractItemModel繼承的自定義 model 解決您的問題。 查看editabletreemodel示例以供參考。 您需要創建指向相同數據的項目,以便在您編輯一個時,其他項目會自動更改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM