2012-03-02 33 views
1

テーブルウィジェットとラベルを含むウィジェットで3つのテーブルを動的に追加していますが、画面上に何も表示されません。縦レイアウトで行いましたが、新しい行、スクロールしないようにする。 同じページに3つのテーブルをすべてスクロールする方法はありますか?Qtでスクロールバーで複数のテーブルを動的に追加する方法

QScrollArea *m_scrollArea =ui->scrollArea_Stats; 
m_scrollArea->setWidgetResizable(true); 
QWidget *area = new QWidget; 
QVBoxLayout *vlay = new QVBoxLayout(m_scrollArea); 
area->setLayout(vlay); 
StatsWidget *objStatsWidget; 

for(int i=0;i<2;i++) 
{ 
    objStatsWidget=new StatsWidget(ui->scrollArea_Stats); 
    vlay->addWidget(objStatsWidget); 
} 

m_scrollArea->setWidget(area); 

ここStatsWidgetは私が動的に3つのテーブルを追加していますが、ページがスクロールされていない私の上部にある2つのlablesを含むカスタムウィジェットとテーブルウィジェット で、vlayはそれだけでそれがで示すことができるものを見せているすべてのテーブルが表示されませんスクロールしないページ。

+0

テーブルをウィジェットに追加するコードを追加してくださいそれを行うにはいくつかの方法があり、どちらを使用しているのかはわかりません。 –

+0

ウィジェットを表示するにはVBoxLayoutを取る必要がありますか? – abhishek

+0

実際の問題は、あなたのウィジェットが必要なサイズにリサイズされないので、一度に3つのテーブル(さらに既存のもの)をすべて見ることができるということでしょうか? –

答えて

1

は、このようなコードを書き直してみてください。

m_scrollArea->setWidgetResizable(true); 
QVBoxLayout *vlay = new QVBoxLayout; 
StatsWidget *objStatsWidget; 

for(int i=0;i<2;i++) 
{ 
    objStatsWidget=new StatsWidget(ui->scrollArea_Stats); 
    vlay->addWidget(objStatsWidget); 
} 
QWidget *area = new QWidget(m_scrollArea); 
area->setLayout(vlay); 
m_scrollArea->setWidget(area); 

EDIT:私はあなたには、いくつかの時間前にやろうとしているもののようなもの... を作った:member.letの呼び出しとしてQVBoxLayoutでカスタムQWidgetを作成しますこのオブジェクト "widgetList"。その後、私はQWidgetListので、このすべてを作っ

...などが...リストとしてあなたのレイアウトを使用して
が 最終的にあなたのスクロール領域のためのウィジェットとしてwidgetListを設定.. は私に知らせてaddWidgettakeAtとして、あなたが必要なすべてのメソッドを再実装使いやすい十分ではなかったと私は私がここでは省略している何か他のものを必要な。..

私はコードの私の作品を見つけた:

class WidgetList : public QWidget 
{ 
    Q_OBJECT 

public: 
    WidgetList(QWidget *parent = 0); 
    ~WidgetList(); 

    void addWidget(QWidget*); 
    void removeWidget(QWidget*); 

    QList<QWidget*> getListWidget() const; 
    QWidget* takeAt(int) const; 
    int count() const; 

private: 
    QVBoxLayout* layout_; 
}; 

た.cpp

WidgetList::WidgetList(QWidget *parent) 
    : /**/QWidget(parent) 
     /**/,layout_(new QVBoxLayout(this)) 
{ 
    this->setLayout(layout_); 
} 


void WidgetList::removeWidget(QWidget* widget) 
{ 
    layout_->removeWidget(widget); 
} 

void WidgetList::addWidget(QWidget* widget) 
{ 
    layout_->addWidget(widget); 
} 

QWidget* WidgetList::takeAt(int index) const 
{ 
    return layout_->takeAt(index)->widget(); 
} 

int WidgetList::count() const 
{ 
    return layout_->count(); 
} 

これは、カスタムウィジェットを挿入するためのレイアウトを使用して新しいウィジェットをだろう... はその後、私はQScrollAreaのウィジェットとしてwidgetListを置く:

EDIT ..

QScrollArea* scrollArea = new QScrollArea; 
widgetList* list = new widgetList(scrollArea); 
scrollArea->setWidget(list); 

すべては私の作品2 :前のコードでうまく動作するメインを投稿します。

QScrollArea* scroll = new QScrollArea; 
WidgetList* w = new WidgetList(scroll); 
QLabel * label = new QLabel("Label1"); 
QLabel* label2 = new QLabel("label2"); 
QTableWidget* table = new QTableWidget(10,10); 

w->addWidget(label); 
w->addWidget(label2); 
w->addWidget(table); 

scroll->setWidget(w); 
scroll->setWidgetResizable(true); 
scroll->show(); 
+0

..まだスクロールしません......... QVBoxLayoutはないと思いますスクロール可能。 – abhishek

+0

ここに書き込むには時間がかかりすぎたので、私の答えを編集しました... –

+0

私はそれを取得していません..私はすでにテーブルウィジェットを持つカスタムウィジェットを作成しました。スニペットを追加してください。助けて。 – abhishek

関連する問題