{ std::vector<ItemHolder> toDelete; for (const auto &item: view->selectedItems()) { toDelete.push_back(item->parent()->take(item)); }} // вот тут всё разрушилось
C++ (Qt)using Items = ::std::list< Item >;using ItemForIndex = ::std:vector< Items::iterator > Items m_items;ItemForIndex m_item_for_index;
C++ (Qt) ItemPointer createChild(qsizetype row = -1) { insert(row == - 1 ? childCount() : row, std::make_unique<Derived>()); return ItemPointer(m_children.back().get()); }
C++ (Qt) ItemPointer createChild(qsizetype row = -1) { insert(row == - 1 ? childCount() : row, std::make_unique<Derived>()); return child(row); }
C++ (Qt)ItemPointer p = ...; // получили валидный айтем...// тут может происходить что угодно, возможно айтем грохнут---if (!p.isNull()) {
C++ (Qt)...// тут может происходить что угодно, возможно айтем грохнут---
C++ (Qt)struct CIem { typedef std::weak_ptr<CItem> TItemPtr; ... private: TItemPtr m_parent; std::vector<std::shared_ptr<CItem>> m_children;};
C++ (Qt)struct CIem { typedef std::weak_ptr<CItem> TItemPtr; ... private: TItemPtr m_parent; std::vector<TItemPtr> m_children; typedef std::list<std::shared_ptr<CItem>> TList; TList m_list; TList::iterator m_iterator;};
C++ (Qt)// staticbool CItem::DeleteItem( TItemPtr itemPtr ){ auto item = itemPtr.lock(); if (!item) return false; auto parent = item->parent().lock(); if (parent) parent->removeChild(item.get()); else item->m_list.erase(m_iterator); return true;} CItem::~CItem( void ){ while (m_children.size()) DeleteItem(m_children.front());}