【问题标题】:How to insert items dynamically in scroll area and loading the scroll bar in Qt?如何在滚动区域中动态插入项目并在 Qt 中加载滚动条?
【发布时间】:2016-06-14 03:31:53
【问题描述】:

在我们开始之前,这可能与Qt Scroll Area does not add in scroll bars 重复,但是用户提供的答案似乎适用于 OP,但对我不起作用。我担心它可能与版本有关,也许?还是我错过了什么? (有可能!)

好吧,对于那些了解 Qt 的人来说,我是一个初学者,我遇到了一个看起来很愚蠢的问题,但却让我很头疼:

我想按下一个按钮并将项目添加到容器中,然后应该可以向下滚动它。就这么简单。

所以我认为也许将布局设置为 scrollArea 就可以了。它确实根据我的需要添加了我的项目,但它不加载滚动条。我已经检查了 ScrollPolicy,但没有什么能满足我的问题。就像 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);
}

【问题讨论】:

  • 您不应该将布局设置为滚动区域,而是设置为它的小部件。
  • 所以你的意思是我应该改用central-&gt;setLayout(gBoxLayout); 吗?如果是这样,它也不能按预期工作。

标签: c++ qt


【解决方案1】:

如果您在 ui 编辑器中为 scrollArea_sales 对象使用 QScrollArea,您可以在对象检查器 (qtdesigner) 中看到 QScrollArea 中的默认小部件,因此您不需要添加它。试试这个代码:

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

【讨论】:

  • 感谢您的回答。你已经解决了这个问题!我不知道结构背后的概念(我在哪里可以正确理解它而不是不太清楚的 qt 文档?)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-12
相关资源
最近更新 更多