#ifndef TREEWIDGET_H
#define TREEWIDGET_H
#include <QApplication>
#include <QMainWindow>
#include <QTreeWidget>
#include <QTreeWidgetItem>
#include <QMimeData>
#include <QDateTime>
#include <QTreeWidget>
#include <QDragEnterEvent>
#include <QDropEvent>
#include <QDebug>
class MyTreeWidget : public QTreeWidget
{
Q_OBJECT
public:
MyTreeWidget(QWidget *parent = nullptr) : QTreeWidget(parent)
{
setDragEnabled(true); //启用拖放
setAcceptDrops(true); //设置拖放
this->setDragDropMode(QAbstractItemView::InternalMove);
QTreeWidgetItem* item123 = new QTreeWidgetItem(QStringList() <<"Item1");
item123->setData(0,Qt::UserRole,"SSR");
this->addTopLevelItem(item123);
this->addTopLevelItem(new QTreeWidgetItem(QStringList() <<"Item2"));
}
protected:
void dragMoveEvent(QDragMoveEvent *event) override
{
// 检查是否有拖拽的项
if (event->mimeData()->hasFormat("application/x-qabstractitemmodeldatalist"))
{
// 调用基类的事件处理函数
QTreeWidget::dragMoveEvent(event);
// 获取当前拖拽的项
QTreeWidgetItem *desItem = itemAt(event->pos());
if (desItem)
{
QString data = desItem->data(0,Qt::UserRole).toString();
if(data == "SSR")
{
// 不允许将item拖拽到SSR实体下
event->ignore(); // 忽略禁止拖拽的项
return;
}
}
}
}
void dropEvent(QDropEvent *event) override
{
if (event->mimeData()->hasFormat("application/x-qabstractitemmodeldatalist"))
{
QByteArray itemData = event->mimeData()->data("application/x-qabstractitemmodeldatalist");
QTreeWidgetItem *srcItem = this->currentItem();
QTreeWidgetItem *desItem = itemAt(event->pos());
QString data = desItem->data(0,Qt::UserRole).toString();
if (desItem == srcItem || desItem == NULL )
{
event->ignore();
return;
}
}
QTreeWidget::dropEvent(event);
}
};
#endif // TREEWIDGET_H
QTreeWidget拖拽功能实现,部分节点禁止拖拽
最新推荐文章于 2024-07-14 16:01:05 发布