我有一个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);
使用鼠标移动项目后,通过" normal"添加项目。 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
中设置的Widget将在移动后解耦。
我创建了一个按钮,按下时会显示qDebug() << listWidget->itemWidget(listWidget->item(0));
。如果我有自定义小部件,或者为了简单起见,QLabel
作为我的项目,在移动它们之前显示QLabel(0x8b41fd8)
,在移动后显示QObject(0x0)
。setItemWidget
。似乎附加到项目的小部件被删除。
{{1}}的{{3}}表示&#34;此功能仅用于在列表小部件项目的位置显示静态内容。&#34;我认为这意味着我们不应该在其中放置可推动的按钮,动态更改小部件等,但现在它似乎是静态内容&#34;意味着整个QListWidget本身必须保持静态?
答案 0 :(得分:1)
在其中,但现在看来&#34;静态内容&#34;意味着整个QListWidget本身必须保持静态?
是的,continue reading the next sentence。这将清楚地说明你需要什么.t
此功能仅用于在列表小部件项目的位置显示静态内容。 如果要显示自定义动态内容或实现自定义编辑器窗口小部件,请改用QListView和子类QItemDelegate。