В моем проекте у меня есть два qTreeWidget (скажем, A и B), я хочу перетащить элементы из treeWidget A в treeWidget B.
У меня несколько проблем:
Не все предметы, хранящиеся в A, должны быть драггэйлами. В других частях моего кода я разделяю их, определяя «тип» в конструкторе:
QTreeWidgetItem *newDatatype = new QTreeWidgetItem(TreeWidgetItemTypes::Datatype);
Я могу проверить их, используя:
if(itemDroppedFromHeaven.type() == TreeWidgetItemTypes::Datatype) ...
Поэтому у меня есть перечисление, чтобы разделить все виды предметов.
- Копирует ли перетаскивание заданные данные?
- Как определить тип предмета при перетаскивании?
- Как установить перетаскивание для каких-либо элементов, включенных / отключенных?
Я пытался перегрузить dropEvent дереваWidget B, чтобы отфильтровать отброшенные предметы:
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();
};
Но с этой идеей я могу получить только видимое Имя элемента, установленное с помощью:
newDatatype->setData(0, Qt::ItemDataRole::DisplayRole, datName);
даже набор данных в качестве роли пользователя не копируется:
newDatatype->setData(0, Qt::ItemDataRole::UserRole, datObjKey);
Я благодарен за каждую идею!
Лучший