119 lines
3.5 KiB
Plaintext
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)
|
|
|
|
|
|
|