Разная политика перетаскивания для разных модельных индексов в QAbstractItemModel
У меня есть древовидная модель, которая содержит группы, которые могут содержать элементы и вложенные группы. Все группы видны в корне модели, но они могут также появиться как элементы группы.
Я хотел бы разрешить следующие операции:
Это означает:
- Группы могут быть удалены только внутри групп, но не в корневом элементе.
- Элементы внутри групп не могут быть перемещены в другие группы или в корневой элемент. Их можно перемещать только внутри этой группы (вверх и вниз).
- (это работает) Корневой элемент принимает элементы из другого представления (здесь не показано)
В настоящее время вот как я устанавливаю флаги для элементов:
Qt::ItemFlags ImportGroupListModel::flags(const QModelIndex & index) const
{
Qt::ItemFlags flags = Qt::NoItemFlags;
if (index.isValid()) {
ImportGroupModelItem* item = static_cast<ImportGroupModelItem*>(index.internalPointer());
if (item != nullptr) {
if (ITEM IS ROOT ELEMENT) {
flags = flags | Qt::ItemFlag::ItemIsDropEnabled | Qt::ItemFlag::ItemIsEnabled;
}
if (ITEM IS TOP GROUP)
flags = flags | Qt::ItemIsDragEnabled;
if (ITEM IS TOP OR NESTED GROUP) {
flags = flags | Qt::ItemFlag::ItemIsDropEnabled | Qt::ItemFlag::ItemIsEnabled | Qt::ItemFlag::ItemIsSelectable;
}
if(ITEM IS ENTRY) {
flags = flags | Qt::ItemFlag::ItemIsEnabled | Qt::ItemFlag::ItemIsSelectable;
}
}
}
return flags;
}
Поэтому я хочу разрешить внутреннее перемещение только для любого модельного индекса, который не является корневым индексом. Как это сделать?