2016-06-14 9 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

あなたはscrollArea_salesためQScrollAreaを使用している場合は、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ドキュメントではなく、どこで正しく理解できますか?)。 –

関連する問題