我有一個listwidget和一個treewidget。 我希望listwidgetitems能夠通過拖放在listwidget中移動,並且我還希望listwidget接受來自treewidget的拖動項目的拖放,但在此之前,我想對數據進行一些處理。如何在拖放中設置事件中的自定義數據?
我現在可以做所有這些事情,但我無法找到如何將自定義數據設置爲從treewidget開始的拖動事件。
例如,我在我的treewidget中有一個topLevelItem,它帶有文本「Add DrawEffect」並帶有一個QIcon,當我拖放listwidget時,我想向listwidget添加一個新項目,他說:
DrawEffect 0x0x0x0 effect-here
,而不是
Add DrawEffect (showing its QIcon as well)
時,我應該設置此數據?
這是我迄今爲止的代碼,在listwidget中拖放listwidgetitems時工作得很好,它可以在listwidget中拖放qtreewidgetitems,但它可以複製它們,但我想先做進一步處理以增加他們:
在我treewidget的構造:
this->setDragDropMode(QAbstractItemView::DragOnly);
this->setDefaultDropAction(Qt::CopyAction);
在我listwidget的構造:
this->setAcceptDrops(true);
this->setDragDropMode(QAbstractItemView::DragDrop);
this->setDefaultDropAction(Qt::MoveAction);
重新實施listwidget的dropEvent:
if(event->source()->inherits("QTreeWidget"))
qDebug() << "The dragged item comes from the TreeWidget.";
else
qDebug() << "The dragged item comes from the ListWidget itself.";
QListWidget::dropEvent(event);
正如你看到的,我可以在treewidget和listwidget項目區分,但我不知道在這之後該怎麼辦...
我猜的東西像這將是確定:
if(event->source()->inherits("QTreeWidget")){
//treewidget item, it needs further processing
}
else
QListWidget::dropEvent(event); //listwidget item, no further processing needed
感謝:/
非常感謝這個答案:)這正是我要找爲:))我沒有得到100%是我是否應該重新實現mimeData()或設置自定義數據,而DragEnter事件發生。請澄清 ! :) – hakermania
更明智重新實現mimeData.Have看看https://qt-project.org/doc/qt-4.8/model-view-programming.html#using-model-view-classes 重寫拖動輸入事件將是更痛苦的,而不是正確的方式去通過 – shubh
謝謝謝謝,謝謝:) – hakermania