如何在滚动区域中动态插入项目并在QT中加载滚动条

How to insert items dynamically in scroll area and loading the scroll bar in Qt?

本文关键字:QT 加载 滚动条 插入项目 动态 滚动 区域      更新时间:2023-10-16

在我们开始事物之前,这可能是qt滚动区域的可能重复的卷轴,但是用户提供的答案且似乎适用于OP,对我不起作用。我担心这可能与版本有关吗?还是我想念什么?(可能!)

好吧,对于那些认识QT的人来说

我想按下按钮并将项目添加到容器中,然后应该可以向下滚动。那样简单。

所以我认为也许将布局设置为scrollarea可以完成这项工作。它确实会根据我的意愿添加我的物品,但没有加载滚动条。我已经检查了卷轴,但没有任何满足我的问题。就像gvboxlayout不会增加大小,并且不让滚动区域滚动。

有人对如何修复它有线索吗?

代码下面:

salewindow.h

#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QListWidget>
#include<QString>
namespace Ui {
class SaleWindow;
}
class SaleWindow : public QMainWindow
{
    Q_OBJECT
public:
    explicit SaleWindow(QWidget *parent = 0);
    ~SaleWindow();
private slots:
    void on_pushButton_clicked();

private:
    Ui::SaleWindow *ui;
    QVBoxLayout *gBoxLayout;
    QMap<QString, QListWidget *>  m_mappings;
};
#endif // SALEWINDOW_H

salewindow.cpp

#include "salewindow.h"
#include "ui_salewindow.h"
#include <iostream>
#include <QGroupBox>
#include <QLabel>
//#include <QtSql/QSqlDatabase>
//#include <QtSql>
#include <QtWidgets/QPushButton>

SaleWindow::SaleWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::SaleWindow),
    gBoxLayout(new QVBoxLayout())
{
    ui->setupUi(this);
    // Adding layout to scrollbar
    {
        ui->scrollArea_sales->setWidgetResizable(true);
        ui->scrollArea_sales->setLayout(gBoxLayout);
        QWidget *central = new QWidget;
        ui->scrollArea_sales->setWidget(central);
    }
}
SaleWindow::~SaleWindow()
{
    delete ui;
    delete gBoxLayout;
}
void SaleWindow::on_pushButton_clicked()
{
    QGroupBox *sale = new QGroupBox();
    sale->setTitle("minha venda");
    gBoxLayout->addWidget(sale);
    ui->scrollArea_sales->setLayout(gBoxLayout);
}

如果您从UI编辑器使用QSCrollarea将scrollarea_sales对象用于scrollarea_sales对象,则可以在qscrollarea中的对象检查器(qtdesigner)中看到一个默认的窗口小部件,因此您无需添加此信息。尝试此代码:

// Adding layout to scrollbar(on the contrctor, replace yor scope by)
{
   ui->scrollArea_sales->widget()->setLayout(gBoxLayout);
}
void MainWindow::on_pushButton_clicked() {// on the slot replace all by:
  QGroupBox *sale = new QGroupBox();
  sale->setTitle("minha venda");
  ui->scrollArea_sales->widget()->layout()->addWidget(sale);
}