Как получить источник перетаскивания drag & amp; операция удаления в QTreeWidget

(Извините за мой английский)

В настоящее время я пытаюсь перетащить & вставьте QTreeWidget. Поэтому я поставил соответствующие настройки и метод dropEvent:

class TreeWidget : public QTreeWidget
{
protected:

virtual void dropEvent(QDropEvent *event) override
{
QModelIndex index = indexAt(event->pos());
if (!index.isValid()) {  // just in case
event->setDropAction(Qt::IgnoreAction);
return;
}

QTreeWidgetItem* item = itemFromIndex(index);
qDebug() << "drop on item" << item->text(0);

QTreeWidget::dropEvent(event);
}
};

int main()
{
TreeWidget *listWidget = new TreeWidget;
listWidget->setSelectionMode(QAbstractItemView::SingleSelection);
listWidget->setDragEnabled(true);
listWidget->viewport()->setAcceptDrops(true);
listWidget->setDropIndicatorShown(true);
listWidget->setDragDropMode(QAbstractItemView::InternalMove);
}

Но в моем случае я бы хотел переместить только родительские элементы. В коде я получаю пункт назначения, но как получить элемент перетаскивания?

Должен ли я перегружать метод перетаскивания? Запустить перетаскивание себя из mousePressEvent? Какой лучший способ сделать?

Спасибо !

1

Решение

Вы можете получить перетаскиваемый элемент с QDropEvent::source:

Если источником операции перетаскивания является виджет в этом приложении,
эта функция возвращает этот источник; в противном случае возвращается 0.

После этого вы можете попытаться преобразовать его в более конкретный класс Qt, т.е. QTreeWidget, с помощью qobject_cast. Если объект не был получен из запрошенного класса, 0 будет возвращено:

Возвращает данный объект, приведенный к типу T, если объект имеет тип T (или
подкласса); в противном случае возвращает 0. Если объект равен 0, то он также будет
вернуть 0.

1

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

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector