QListWidget拖拽如何提示是放在上边还是下边
时间: 2023-06-15 22:03:09 浏览: 108
listView上下拖动换位置
在Qt中,QListWidget默认是支持拖拽操作的,但是默认并没有提供拖拽时的放置提示。为了实现这个功能,可以通过重载QListWidget的dragEnterEvent()和dragMoveEvent()方法,并在这两个方法中实现拖拽时的放置提示。
在dragEnterEvent()方法中,可以设置drag的动作和放置提示的位置,例如:
```
void MyListWidget::dragEnterEvent(QDragEnterEvent *event)
{
if (event->mimeData()->hasFormat("application/x-qabstractitemmodeldatalist")) {
event->setDropAction(Qt::MoveAction);
event->setAccepted(true);
setStyleSheet("QListWidget::item { border: 1px solid black; }");
} else {
event->setAccepted(false);
}
}
```
在dragMoveEvent()方法中,可以根据鼠标的位置计算出放置的位置,并设置放置提示的位置,例如:
```
void MyListWidget::dragMoveEvent(QDragMoveEvent *event)
{
if (event->mimeData()->hasFormat("application/x-qabstractitemmodeldatalist")) {
QPoint pos = event->pos();
int index = indexAt(pos).row();
QRect rect = visualItemRect(item(index));
if (pos.y() < rect.top() + rect.height() / 2) {
setStyleSheet("QListWidget::item:selected { border-top: 1px solid black; border-bottom: none; }");
} else {
setStyleSheet("QListWidget::item:selected { border-top: none; border-bottom: 1px solid black; }");
}
event->setDropAction(Qt::MoveAction);
event->setAccepted(true);
} else {
event->setAccepted(false);
}
}
```
在上述代码中,我们通过计算鼠标的位置,判断放置的位置是否在当前项的上半部分还是下半部分,然后设置相应的放置提示样式。
当然,以上只是实现放置提示的基本思路,具体的实现方式还需要根据实际需求进行调整。
阅读全文