I have got a QListWidgetItem
, which has a QWidget
and some QLabels
. The height of the labels (imageLabel
, titleLabel
and descriptionLabel
) varies depending on the text length. So does the height of the QWidget, which leds to different sizes in QListWidgetItem
. So far the parameters for setSizeHint
are static:
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);
Is there any way to properly set the sizeHint
regarding the width and height of the displayed content used in the QLabels
of the QWidget
?
For instance the first QListWidgetItem
may have a descriptionLabel
with a text length of 300 characters and the second QListWidgetItem
may have a descriptionLabel
with a text length of 1000 characters. So far both QListWidgetItems
will have the same size (200px width and 180px height). While it may fit on the first QListWidgetItem
, because it has only 300 characters, it may not fit on the second QListWidgetItem
, because of the 1000 characters. Therefore I would like to somehow dynamically adjust the size of the QListWidgetItem
regarding the needed space (first one will need less than the second one).
sizeHint
on aQListWidgetItem
is a no-op until you configure the view's header to actually use said size hint? You'd need to post a self-contained example that demonstrates the problem, with an explanation of what you expect. So far I don't know what other code is missing, and what you really want to happen. Your question is worded as if you wished all the item sizes to be the same (you complain that they are different). – AnversQListWidgetItems
. – HidalgolistWidgetItem->setSizeHint(200, index % 2 == 0 ? 180 : 360));
I just don't know how much height / width each QLabel need for displaying its content. – Hidalgo