gpt4 book ai didi

C++ Qt 如何在滚动区域添加小部件?

转载 作者:行者123 更新时间:2023-11-28 04:08:38 25 4
gpt4 key购买 nike

我试图在滚动区域显示自定义小部件,但它只显示最后一个。

滚动区域内容必须随组合框索引动态变化,它们也会变化并显示最后一个元素。

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
fileMenu = ui->menuBar->addMenu(tr("&Archivo"));
openFileAction = new QAction(tr("Abir archivo"), this);
connect(openFileAction,
SIGNAL(triggered()),
this,
SLOT(openFile()));
fileMenu->addAction(openFileAction);


scroll = ui-> scrollArea;
scroll->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
scroll->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
scroll->setWidgetResizable(true);


ui->stackedWidget->setCurrentIndex(0);
}

vector<product> MainWindow::filter(QString cad)
{
vector <product> tempList;
QMessageBox message;
for(size_t i(0);i<products.size();i++){
if(products.at(i).getId().contains(cad)){
product *p = new product;
p->setId(products.at(i).getId());
p->setName(products.at(i).getName());
p->setPrice(products.at(i).getPrice());
tempList.push_back(*p);
}
}
return tempList;
}

void MainWindow::loadproducts(int category){
QMessageBox message;
vector <product> tempList;
switch(category){

case Alimentos:{
tempList=filter("AB");
break;
}

case Libros:{
tempList=filter("L");
break;
}

case Electronicos:{
tempList=filter("E");
break;
}

case Hogar:{
tempList=filter("HC");
break;
}

case Deporte:{
tempList=filter("D");
break;
}

case Todos:{
tempList=products;
break;
}

default:{
break;
}
}

//THIS FOR IS SUPPOSED TO ADD WIDGETS TO SCROLL AREA

for(size_t i=0;i<tempList.size();i++){
ProductWidget *p = new ProductWidget(widget, tempList.at(i).getId(), tempList.at(i).getName(), tempList.at(i).getPrice());
scroll->setWidget(p);
}

tempList.clear();
}

滚动区域必须显示 10 个小部件,但它只显示最后一个。

最佳答案

您只能使用 setWidget() 方法在 QScrollArea 中设置一个 widget,如果添加另一个 widget 它将替换之前的 widget。如果你想显示几个小部件,那么你必须将它们全部放在一个小部件中,最后一个小部件将它设置在 QScrollArea 中。例如你的情况:

// ...
QWidget *container = new QWidget;
scroll->setWidget(container);
QVBoxLayout *lay = new QVBoxLayout(container);

for(size_t i=0;i <tempList.size(); i++){
ProductWidget *p = new ProductWidget(...);
lay->addWidget(p);
}
// ...

关于C++ Qt 如何在滚动区域添加小部件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58263720/

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