QTableView拖拽行重写dragEnterEvent、dropEvent、dragMoveEvent
时间: 2023-10-06 09:09:23 浏览: 501
在使用 QTableView 进行行拖拽时,你可以重写以下几个事件来实现拖拽行的功能:`dragEnterEvent`、`dropEvent` 和 `dragMoveEvent`。
1. dragEnterEvent:当拖动对象进入 QTableView 区域时触发该事件。你可以在该事件中判断拖动的对象是否是可接受的类型,并设置接受拖放操作。
```cpp
void YourTableView::dragEnterEvent(QDragEnterEvent *event) {
if (event->mimeData()->hasFormat("application/x-qabstractitemmodeldatalist")) {
event->acceptProposedAction();
}
}
```
2. dropEvent:当拖动对象在 QTableView 区域内释放时触发该事件。你可以在该事件中处理拖放操作,例如获取拖动的行数据并进行相应的处理。
```cpp
void YourTableView::dropEvent(QDropEvent *event) {
const QMimeData *mimeData = event->mimeData();
if (mimeData->hasFormat("application/x-qabstractitemmodeldatalist")) {
QByteArray encodedData = mimeData->data("application/x-qabstractitemmodeldatalist");
QDataStream stream(&encodedData, QIODevice::ReadOnly);
while (!stream.atEnd()) {
int row, col;
QMap<int, QVariant> roleDataMap;
stream >> row >> col >> roleDataMap;
// 处理拖放操作,例如插入数据到指定位置
// ...
}
event->acceptProposedAction();
}
}
```
3. dragMoveEvent:当拖动对象在 QTableView 区域内移动时触发该事件。你可以在该事件中设置合适的反馈操作,例如更改光标的形状。
```cpp
void YourTableView::dragMoveEvent(QDragMoveEvent *event) {
if (event->mimeData()->hasFormat("application/x-qabstractitemmodeldatalist")) {
event->setDropAction(Qt::MoveAction);
event->accept();
}
}
```
记得在你的自定义 QTableView 类中重写这些事件,并将其设置为可接受拖放操作。这样,你就可以实现 QTableView 的行拖拽功能了。
阅读全文