QListWidget 拖拽超出范围后 itemWidget就消失了
时间: 2024-01-17 13:05:40 浏览: 235
Qt控件QListWidget实现鼠标拖拽Item换序
3星 · 编辑精心推荐
QListWidget 是一个非常常用的 Qt 控件,用于显示列表数据。当你在 QListWidget 中使用 itemWidget 时,可能会遇到拖拽超出范围后 itemWidget 消失的问题。
这个问题通常是由于 itemWidget 超出了 QListWidget 的边界而导致的。当你拖拽 itemWidget 离开 QListWidget 的边界时,itemWidget 就会消失。
为了解决这个问题,你可以通过将 itemWidget 的父对象设置为 QListWidget,这样当 itemWidget 超出 QListWidget 的边界时,它仍然会继续存在于 QListWidget 内部。
这里是一个示例代码:
```python
from PyQt5.QtWidgets import QApplication, QWidget, QListWidget, QListWidgetItem, QLabel, QHBoxLayout
class MyWidget(QWidget):
def __init__(self):
super().__init__()
self.q_list_widget = QListWidget()
self.q_list_widget.setDragEnabled(True)
self.q_list_widget.setAcceptDrops(True)
self.q_list_widget.viewport().setAcceptDrops(True)
for i in range(10):
item_widget = QWidget()
item_layout = QHBoxLayout()
item_label = QLabel(f"Item {i}")
item_layout.addWidget(item_label)
item_widget.setLayout(item_layout)
item = QListWidgetItem()
item.setSizeHint(item_widget.sizeHint())
self.q_list_widget.addItem(item)
self.q_list_widget.setItemWidget(item, item_widget)
item_widget.setParent(self.q_list_widget)
layout = QHBoxLayout()
layout.addWidget(self.q_list_widget)
self.setLayout(layout)
if __name__ == '__main__':
app = QApplication([])
widget = MyWidget()
widget.show()
app.exec_()
```
在这个示例代码中,我们创建了一个 QListWidget,并向其中添加了 10 个 itemWidget。我们将每个 itemWidget 的父对象设置为 QListWidget,并为其添加了一个 QLabel。
当你运行这个示例代码并拖拽 itemWidget 时,你会发现即使 itemWidget 超出 QListWidget 的边界,它仍然会保持在 QListWidget 内部。
阅读全文