Files
build_infra/0_笔记/0_qt/model_view
T
2026-06-16 10:23:51 +08:00

119 lines
3.5 KiB
Plaintext

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<Change> changes;
struct Persistent {
Persistent() {}
QMultiHash<QModelIndex, QPersistentModelIndexData *> indexes;
QStack<QVector<QPersistentModelIndexData *> > moved;
QStack<QVector<QPersistentModelIndexData *> > invalidated;
void insertMultiAtEnd(const QModelIndex& key, QPersistentModelIndexData *data);
} persistent;
Qt::DropActions supportedDragActions;
QHash<int,QByteArray> roleNames;
}
QHash<QModelIndex, QPersistentModelIndexData *> &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)