[英]Qt C++ - QListWidget layout doesn't scale to fit the content
我有一个QWidget rzadKontener
,它表示QListWidget
的一行。
QWidget* rzadKontener = new QWidget;
QHBoxLayout* rzadKontenerLayout = new QHBoxLayout();
rzadKontenerLayout->setAlignment(Qt::AlignLeft);
rzadKontenerLayout->setAlignment(Qt::AlignTop);
rzadKontener->setObjectName("rzadKontener_" + poziom);
rzadKontener->setFixedHeight(200);
rzadKontener->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
rzadKontener->setLayout(rzadKontenerLayout);
(....)
QListWidgetItem* newItemRzad = new QListWidgetItem;
newItemRzad->setSizeHint(QSize(listSize*225, 200));
QString poziomText = poziom;
newItemRzad->setText(poziomText);
newItemRzad->setTextColor(QColor(Qt::white));
ui->listWidgetZdjeciaModelu->addItem(newItemRzad);
ui->listWidgetZdjeciaModelu->setItemWidget(newItemRzad, rzadKontener);
它包含许多项,即带有图片,按钮和文本的QWidgets
。 然后将其放置在QListWidget
,其中包含所有这些项目。 当我一次添加5个项目时,在创建新的rzadKontener
,将出现QListWidget
滚动条。 但是,如果我以后再添加3项和2项,它们将没有滚动条而超出范围。 如何强制布局缩放为新的rzadKontener
的大小?
我找到了答案。 而不是修改列表内的QWidget,我应该修改它在(父级...)内部的QListWidgetItem
。
QWidget* newPicture = new QWidget;
yadda yadda yadda (....)
int currentRowWidth = ui->listWidgetZdjeciaModelu->findChild<QWidget*>(objectName)->width(); //gets max width of rzadKontener, which fills the entirety of the row - it equals the QListWidgetItem's width
int newWidth = currentRowWidth + 225; //225 is a fixed width of newPicture
ui->listWidgetZdjeciaModelu->item(0)->setSizeHint(QSize(newWidth, 200));
ui->listWidgetZdjeciaModelu->findChild<QWidget*>(objectName)->layout()->addWidget(newPicture );
我们可以执行ui->listWidgetZdjeciaModelu->item(0)->setSizeHint(QSize(newWidth, 200));
而不是特定的行( ->item(row)
),因为列表是一个矩形。 不管我们扩大哪一行,无论如何,整个过程都会延伸。
但是,如果要获取行号,可以通过以下方式进行操作:
int row=0;
//we make a list. Each of my QListWidgetItem has a unique string poziom in it, so I can filter by that.
QList<QListWidgetItem *> items = ui->listWidgetZdjeciaModelu->findItems(poziom, Qt::MatchContains);
if (items.size() > 0) {
//we use the first (and only, in my case) item on this list to get row number
row = ui->listWidgetZdjeciaModelu->row(items[0]);
}
奇怪的是,我已经尝试过了。 必须一直打错字。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.