2016-06-14 44 views
3

在我們開始之前,這可能是Qt Scroll Area does not add in scroll bars的一個可能的重複,但是用戶提供的答案似乎適用於OP,對我來說不起作用。我擔心它可能與版本有關,也許呢?或者我錯過了什麼? (這是可能的!)如何在滾動區域動態插入項目並在Qt中加載滾動條?

好吧,對於那些誰知道Qt的,我是一個初學者,我似乎什麼是一個非常愚蠢的問題,而是給了我許多煩惱:

我想按下按鈕並將項目添加到容器,然後應該可以將其向下滾動。就如此容易。

所以我認爲,也許設置scrollArea佈局將完成這項工作。它確實添加我的項目,但它不會加載scrollBar。我已經檢查了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); 
} 
+0

你不應該把佈局設置到滾動區域,而是設置到它的部件。 – thuga

+0

所以你的意思是我應該做'central-> setLayout(gBoxLayout);'而不是?如果是這樣,它也不能按預期那樣工作。 –

回答

1

如果您使用的是QScrollArea爲scrollArea_sales從UI編輯器對象,你可以看到對象檢查器(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); 
} 
+0

謝謝你的回答。你已經解決了這個問題!我不知道結構背後的概念(我在哪裏可以正確理解它,而不是不那麼明確的qt文檔?)。 –