qtreeview: перетаскивание поддерева приводит к неправильному выбору

Я пытался перетащить поддерево в qtreeview. Дерево правильно переупорядочивается, когда я выполняю отбрасывание, а базовая модель обновляется, однако после этого после выбора элемента происходит сбой. Я не смог придумать надежный способ заставить QT правильно перерисовать выделение. Смотрите скриншоты ниже:

До:

Перед перетаскиванием

После перетаскивания верхнего узла на узел 2:

введите описание изображения здесь

Соответствующий код просмотра:

void View::dropEvent(QDropEvent *evt)
{
QTreeView::dropEvent(evt);

QModelIndex start = indexAt(_drag_start);
QModelIndex end = indexAt(evt->pos());

_model->moveTo(start, end);
}

Соответствующий код модели:

void Model::moveTo(QModelIndex& start, QModelIndex& end)
{
// ... omitted some error checking code to ensure start and end have the same parent

ModelData* a = (ModelData*) start.internalPointer();
ModelData* b = (ModelData*) end.internalPointer();

ModelData* list = (ModelData*) (parent(start).internalPointer());

int idxa = list->indexOf(a);
int idxb = list->indexOf(b);

// underneath this is QList<...>::moveTo
list->moveTo( idxa, idxb );

QModelIndex p = this->parent(start);

emit dataChanged( index(0, 0, p), index(rowCount(p)-1, 1, p) );
}

Какие-либо предложения? Спасибо!

0

Решение

Оказывается, это исправлено добавлением следующего кода в метод Model :: moveTo ():

...
emit layoutAboutToBeChanged();
list->moveTo( ... );
emit layoutChanged();
...
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]