gpt4 book ai didi

c++ - Qt C++ - QListWidget 布局不缩放以适应内容

转载 作者:行者123 更新时间:2023-11-28 06:03:12 24 4
gpt4 key购买 nike

我有一个 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 个项目时,同时创建一个新的 rzadKontenerQListWidget 中的滚动条将出现。但是,如果我稍后添加 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) ), 因为列表是一个矩形。不管我们扩大哪一行,整个东西都会拉伸(stretch)。

但是,如果你想得到行号,你可以这样做:

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]);
}

奇怪的是,我已经试过了。一定一直在打错字。

关于c++ - Qt C++ - QListWidget 布局不缩放以适应内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32873581/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com