Im my project I have two qTreeWidgets (let's say A and B), I want to drag Items from treeWidget A to treeWidget B.
I have multiple problems:
Not all of the items stored in A should be draggale. At other parts of my code I seperate them by defining the "type" within the constructor:
QTreeWidgetItem *newDatatype = new QTreeWidgetItem(TreeWidgetItemTypes::Datatype);
I can check them by using:
if(itemDroppedFromHeaven.type() == TreeWidgetItemTypes::Datatype) ...
Therefore I have a enum to seperate all the different kinds of Items.
- Does drag and drop copy the set data?
- How can I detect the kind of Item while dragging?
- How to set dragging for some kind of Items enabled/disabled?
Iv'e tried to overload the dropEvent of the treeWidget B, to filter the dropped Items:
class CustomTreeWidget : public QTreeWidget
{
Q_OBJECT
public:
using QTreeWidget::QTreeWidget;
void dropEvent(QDropEvent *event) override
{
QString format = event->mimeData()->formats().at(0);
QString data = event->mimeData()->text();
qDebug () << data;
QStandardItem *sitem = new QStandardItem;
QString itemName = sitem->text();
qDebug() << itemName;
if (itemName == "Messages" || itemName == "Datatypes" || itemName == "Enums")
{
event->setDropAction(Qt::IgnoreAction);
return;
}
else
{
QTreeWidget::dropEvent(event);
emit itemDropped();
}
}
signals:
void itemDropped();
};
But with this idea I can only get the visible Item Name set with:
newDatatype->setData(0, Qt::ItemDataRole::DisplayRole, datName);
even data set as user role are not copied:
newDatatype->setData(0, Qt::ItemDataRole::UserRole, datObjKey);
I'm thankful for every idea! Best