(Извините за мой английский)
В настоящее время я пытаюсь перетащить & вставьте 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? Какой лучший способ сделать?
Спасибо !
Вы можете получить перетаскиваемый элемент с QDropEvent::source
:
Если источником операции перетаскивания является виджет в этом приложении,
эта функция возвращает этот источник; в противном случае возвращается 0.
После этого вы можете попытаться преобразовать его в более конкретный класс Qt, т.е. QTreeWidget
, с помощью qobject_cast
. Если объект не был получен из запрошенного класса, 0
будет возвращено:
Возвращает данный объект, приведенный к типу T, если объект имеет тип T (или
подкласса); в противном случае возвращает 0. Если объект равен 0, то он также будет
вернуть 0.
Других решений пока нет …