Элементы в QListWidget становятся невидимыми после изменения порядка

у меня есть 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)); при нажатии. Если у меня есть собственные виджеты, или для простоты, QLabels как мои предметы, прежде чем перемещать их вокруг QLabel(0x8b41fd8)после движения отображает QObject(0x0), Кажется, виджет, прикрепленный к элементу, удален.

руководство за setItemWidget утверждает, что «Эта функция должна использоваться только для отображения статического содержимого вместо элемента виджета списка». Я думал, что это означает, что мы не должны помещать в них нажимные кнопки, динамически изменяемые виджеты и т. Д., Но теперь кажется, что «статический контент» означает, что весь QListWidget должен оставаться статичным?

2

Решение

в них, но теперь кажется, что «статический контент» означает, что весь QListWidget сам должен оставаться статичным?

Да, продолжить чтение следующего предложения. Это прояснит, что вам нужно для всего этого.

Эта функция должна использоваться только для отображения статического содержимого вместо элемента виджета списка. Если вы хотите отобразить пользовательский динамический контент или реализовать пользовательский виджет редактора, используйте взамен QListView и подкласс QItemDelegate.

1

Другие решения


По вопросам рекламы [email protected]