QModelIndex{ int r, c; quintptr i; const QAbstractItemModel *m; inline QModelIndex QModelIndex::parent() const { return m ? m->parent(*this) : QModelIndex(); } inline QVariant QModelIndex::data(int arole) const { return m ? m->data(*this, arole) : QVariant(); } } QPersistentModelIndex{ QPersistentModelIndexData *d; } QPersistentModelIndexData{ QModelIndex index; QAtomicInt ref; } // model 不存储数据 只是定义了操作数据的接口 // 但是抽象出了持久引用,保存持久引用结构 QAbstractItemModelPrivate{ struct Change { Q_DECL_CONSTEXPR Change() : parent(), first(-1), last(-1), needsAdjust(false) {} Q_DECL_CONSTEXPR Change(const QModelIndex &p, int f, int l) : parent(p), first(f), last(l), needsAdjust(false) {} QModelIndex parent; int first, last; // In cases such as this: // - A // - B // - C // - - D // - - E // - - F // // If B is moved to above E, C is the source parent in the signal and its row is 2. When the move is // completed however, C is at row 1 and there is no row 2 at the same level in the model at all. // The QModelIndex is adjusted to correct that in those cases before reporting it though the // rowsMoved signal. bool needsAdjust; Q_DECL_CONSTEXPR bool isValid() const { return first >= 0 && last >= 0; } }; QStack changes; struct Persistent { Persistent() {} QMultiHash indexes; QStack > moved; QStack > invalidated; void insertMultiAtEnd(const QModelIndex& key, QPersistentModelIndexData *data); } persistent; Qt::DropActions supportedDragActions; QHash roleNames; } QHash &indexes = model->d_func()->persistent.indexes; qnamespace.h enum ItemDataRole { DisplayRole = 0, DecorationRole = 1, EditRole = 2, ToolTipRole = 3, StatusTipRole = 4, WhatsThisRole = 5, // Metadata FontRole = 6, TextAlignmentRole = 7, BackgroundRole = 8, ForegroundRole = 9, #if QT_DEPRECATED_SINCE(5, 13) // ### Qt 6: remove me BackgroundColorRole Q_DECL_ENUMERATOR_DEPRECATED = BackgroundRole, TextColorRole Q_DECL_ENUMERATOR_DEPRECATED = ForegroundRole, #endif CheckStateRole = 10, // Accessibility AccessibleTextRole = 11, AccessibleDescriptionRole = 12, // More general purpose SizeHintRole = 13, InitialSortOrderRole = 14, // Internal UiLib roles. Start worrying when public roles go that high. DisplayPropertyRole = 27, DecorationPropertyRole = 28, ToolTipPropertyRole = 29, StatusTipPropertyRole = 30, WhatsThisPropertyRole = 31, // Reserved UserRole = 0x0100 }; enum ItemFlag { NoItemFlags = 0, ItemIsSelectable = 1, ItemIsEditable = 2, ItemIsDragEnabled = 4, ItemIsDropEnabled = 8, ItemIsUserCheckable = 16, ItemIsEnabled = 32, ItemIsAutoTristate = 64, #if QT_DEPRECATED_SINCE(5, 6) ItemIsTristate = ItemIsAutoTristate, #endif ItemNeverHasChildren = 128, ItemIsUserTristate = 256 }; Q_DECLARE_FLAGS(ItemFlags, ItemFlag) Q_DECLARE_OPERATORS_FOR_FLAGS(ItemFlags)