繁体   English   中英

Qt C ++-QListWidget布局无法缩放以适应内容

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM