如何根据内容调整 QListWidgetItem 的大小?

How to resize QListWidgetItem according to it's content?

我正在将 QListWidgetItems 添加到 QListWidget。有什么方法可以根据内容数据设置 QListWidgetItem 的大小吗?

QSize size(50, 20);
QListWidgetItem* newItem1 = new QListWidgetItem();
newItem1->setText("short text");
newItem1->setSizeHint(size);
listWidget->addItem(newItem1); //listWidget is previously created
QListWidgetItem* newItem2 = new QListWidgetItem();
newItem2->setText("this is a very long text");
newItem2->setSizeHint(size);
listWidget->addItem(newItem2);

newItem1 的文本显示没有任何问题。但是 newItem2 文本没有完全显示。它只显示几个字符,然后“...”作为文本省略。如何在没有省略号的情况下显示完整的文本?我想根据项目数据的大小设置大小而不设置任何常数。

我只是 copy/pasted 你的代码,删除了两个项目的 setSizeHint() 函数调用并添加了一些我的。这是工作代码:

QListWidgetItem* newItem1 = new QListWidgetItem();
newItem1->setText("short text");
ui->listWidget->addItem(newItem1); 
QListWidgetItem* newItem2 = new QListWidgetItem();
newItem2->setText("this is a very long text");
ui->listWidget->addItem(newItem2);
ui->listWidget->setFixedSize(ui->listWidget->sizeHintForColumn(0) + ui->listWidget->frameWidth() * 2,
                             ui->listWidget->sizeHintForRow(0) * ui->listWidget->count() + 2 * ui->listWidget->frameWidth());

如您所见,两个项目都已完全显示。

实际上我不小心为 QListWidget 启用了 uniformItemSizes。当我禁用它时,QListWidgetItems 会根据其内容自动调整大小。