QListWidget 中的项目在重新排序后变得不可见
Items in a QListWidget turn invisible after reordering
我有一个QListWidget
,它由使用setItemWidget
的自定义小部件填充。
这些自定义列表项是完全静态的,它们只是有一堆带有各种文本和图像的标签。我的 QListWidget 显示正确。我允许拖放重新排序,在将项目移动到其他位置后,它变得不可见。它不会消失,因为它占用了显示屏的空间,我什至可以点击它,它只是完全看不见,好像里面的所有标签突然变成了空白。有趣的是,如果我为这些小部件设置背景颜色,则不会清除自定义背景颜色,只会清除内容。
如果我将通用QListWidgetItem
插入QListQidget
,即使在移动后它们仍然可见。
是什么导致自定义小部件变为空白,我该如何阻止这种情况发生?
例。
QListWidgetItem *item;
MyCustomWidget *custom;
item = new QListWidgetItem();
item->setText("This will remain visible");
listWidget->addItem(item);
item = new QListWidgetItem();
custom = new MyCustomWidget ();
custom->setName(QString("This will vanish")); // this will add text to one of the labels inside it.
listWidget->addItem(item);
item->setSizeHint(QSize(50,65));
listWidget->setItemWidget(item, custom);
用鼠标移动项目后,通过"普通"QListWidgetItems 添加的项目保留其内容,而通过setItemWidget
添加的项目将消失其内容。
编辑
即使我的自定义小部件只是一个QLabel
,它的内容在移动后也消失了。
QLabel *label;
item = new QListWidgetItem();
label = new QLabel();
label->setText("This label will vanish");
listWidget->addItem(item);
listWidget->setItemWidget(item, label);
与自定义微件一样,其大小和背景颜色(如果已设置(保持不变,因此不会删除该项目。仅清除标签的内容。如果我为标签本身设置背景(通过 setStyleSheet(,它就会被清除。如果我为项目本身设置背景,它仍然存在。
编辑 2
似乎在setItemWidget
中设置的小部件将在移动后解耦。
我创建了一个按钮,按下时会显示qDebug() << listWidget->itemWidget(listWidget->item(0));
。如果我有自定义小部件,或者为了简单起见,QLabel
s 作为我的项目,在移动它们之前它会显示QLabel(0x8b41fd8)
,移动后它会显示QObject(0x0)
。附加到该项目的小部件似乎已删除。
setItemWidget
手册指出"此功能只能用于在列表小部件项的位置显示静态内容。我认为这意味着我们不应该在其中放置可推送的按钮、动态更改的小部件等,但现在看来"静态内容"意味着整个 QListWidget 本身必须保持静态?
在他们中,但现在看来"静态内容"意味着整个 QListWidget 本身必须保持静态?
是的,继续阅读下一句。这将清楚地表明您需要所有这些内容。
此函数应仅用于在列表小部件项的位置显示静态内容。如果要显示自定义动态内容或实现自定义编辑器小部件,请改用 QListView 和子类 QItemDelegate。
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 无法在 CLion 中构建 C++ 项目
- 运行同一解决方案的另一个项目的项目
- CMake-按正确顺序将项目与C运行时对象文件链接
- 二叉排序树无法编译
- 我的快速排序在对预排序的项目进行排序时失败,如何改进?
- 类(可能是代理)的命名,允许在不修改基础容器的情况下对项目进行排序和删除
- 如何修改函数以按C++的排序顺序插入每个项目
- 在子阵列C 中按第一个项目对数组进行排序
- 将矢量与其中的类项目进行排序
- 与排序相关的算法(将每个项目替换为排序排序中的索引)
- 如何正确使用 QQuickItem::stackBefore() 在 GridLayout 中对项目重新排序
- 如何在 MFC 的 CListCtrl 中对项目进行排序
- QListWidget 中的项目在重新排序后变得不可见
- 对包含三个项目的数组进行排序
- 按选中状态对 QListWidget 中的项目进行排序
- 如何简单地按字母顺序对wxListCtrl的项目进行排序
- 在我的排序列表中插入项目时出现问题
- C++按属性对项目进行排序
- 基于排序和搜索算法的c++项目