小编err*_*r69的帖子

QListWidgetItem 内的小部件在内部移动后消失

我有一个由via和拖放模式QListWidget填充的,当我在列表中移动项目时,其标签会消失。QLabel.setItemWidget()InternalMove

我该如何解决这个问题?

在此输入图像描述

一个最小的重现示例

from PyQt5.QtWidgets import (
    QApplication, QLabel, QStyle,
    QListWidget, QListWidgetItem
)
from PyQt5.QtCore import QSize
import sys


if __name__ == '__main__':
    app = QApplication(sys.argv)

    list = QListWidget()
    list.setFixedHeight(400)
    list.setDragDropMode(QListWidget.DragDropMode.InternalMove)

    for _ in range(8):
        item = QListWidgetItem()
        item.setSizeHint(QSize(40, 40))
        list.addItem(item)

        label = QLabel()
        label.setPixmap(list.style().standardIcon(
            QStyle.StandardPixmap.SP_ArrowUp).pixmap(QSize(40,40)))
        list.setItemWidget(item, label)

    list.show()

    sys.exit(app.exec())
Run Code Online (Sandbox Code Playgroud)

编辑

阅读其说明文档后.setItemWidget()

此函数只能用于在列表小部件项目的位置显示静态内容。如果您想显示自定义动态内容或实现自定义编辑器小部件,请改用 QListView 和 QStyledItemDelegate 子类。

我想知道这是否与该问题有关,在这种情况下“静态内容”意味着什么,被QLabel视为“动态内容”?

编辑#2

问题是在 a 内部dropEvent()dropMimeData()调用,这又创建了一个完整的新项目?(rowsInserted被调用),我猜这对于 self 项目不应该发生,因为拖动项目中设置的小部件没有序列化并存储在内部mimedata …

drag-and-drop qlistwidget python-3.x qt5 pyqt5

3
推荐指数
1
解决办法
600
查看次数

标签 统计

drag-and-drop ×1

pyqt5 ×1

python-3.x ×1

qlistwidget ×1

qt5 ×1