我有一个 QListWidgetItem
,其中包含一个 QWidget
和一些 QLabel
。标签的高度(imageLabel
、titleLabel
和descriptionLabel
)根据文本长度而异。这也会导致 QWidget
的高度不同,从而在 QListWidgetItem
中产生不同的大小。到目前为止,setSizeHint
的参数是静态的:
QListWidgetItem* listWidgetItem = new QListWidgetItem();
listWidgetItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
listWidgetItem->setSizeHint(200, 180));
QWidget* widget = new QWidget();
QVBoxLayout* rootLayout = new QVBoxLayout();
rootLayout->setAlignment(Qt::AlignTop);
QHBoxLayout* contentLayout = new QHBoxLayout();
contentLayout->setAlignment(Qt::AlignLeft);
QLabel* imageLabel = new QLabel();
imageLabel->setPixmap(pixmap);
contentLayout->addWidget(imageLabel, 0, Qt::AlignTop);
QVBoxLayout* informationLayout = new QVBoxLayout();
informationLayout->setAlignment(Qt::AlignTop);
QLabel* titleLabel = new QLabel("<b>" + title + "</b>");
titleLabel->setWordWrap(true);
informationLayout->addWidget(titleLabel);
QLabel* descriptionLabel = new QLabel(description);
descriptionLabel->setWordWrap(true);
informationLayout->addWidget(descriptionLabel);
QLabel* dateLabel = new QLabel(date.toString());
informationLayout->addWidget(dateLabel);
contentLayout->addLayout(informationLayout);
rootLayout->addLayout(contentLayout);
QHBoxLayout* buttonLayout = new QHBoxLayout();
QPushButton* buttonOne = new QPushButton(tr("Button 1"));
QObject::connect(buttonOne, SIGNAL(clicked()), mButtonOneSignalMapper, SLOT(map()));
mButtonOneSignalMapper->setMapping(buttonOne, index);
buttonLayout->addWidget(buttonOne);
QPushButton* buttonTwo = new QPushButton(tr("Button 2"));
QObject::connect(buttonTwo, SIGNAL(clicked()), mButtonTwoSignalMapper, SLOT(map()));
mButtonTwoSignalMapper->setMapping(buttonTwo, index);
buttonLayout->addWidget(buttonTwo);
rootLayout->addLayout(buttonLayout);
widget->setLayout(rootLayout);
mListWidget->addItem(listWidgetItem);
mListWidget->setItemWidget(listWidgetItem, widget);
有没有一种可以正确设置
sizeHint
的方式,使其与QWidget
中使用的显示内容的宽度和高度相对应?例如,第一个
QListWidgetItem
可能具有300个字符的descriptionLabel
,而第二个QListWidgetItem
可能具有1000个字符的descriptionLabel
。到目前为止,这两个QListWidgetItems
将具有相同的大小(200px宽度和180px高度)。尽管第一个QListWidgetItem
可能适合,因为它只有300个字符,但由于1000个字符,第二个QListWidgetItem
可能不适合。因此,我希望能够根据需要的空间动态调整QListWidgetItem
的大小(第一个将需要比第二个更少)。
QListWidgetItem
上设置sizeHint
直到你配置视图的标题栏以实际使用该大小提示时才会生效吗?你需要发布一个自包含的示例,演示问题,并解释你期望发生什么。到目前为止,我不知道还缺少哪些其他代码,以及你真正想要发生什么。你的问题措辞似乎希望所有项目的大小都相同(你抱怨它们不同)。 - Kuba hasn't forgotten MonicalistWidgetItem->setSizeHint(200, index % 2 == 0 ? 180 : 360));
。我只是不知道每个QLabel需要多少高度/宽度来显示其内容。 - Niklas