2012-03-02 56 views
1

我在包含表格小部件和標籤的小部件中動態添加三個表格,但沒有在屏幕上顯示,我試圖用垂直佈局來完成,但如果我添加一個新的行,所以不滾動。 是否有任何其他方式讓所有三個表在滾動的同一頁上。如何在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是包含在頂部2個標貼我的自定義窗口小部件和表格部件 我動態添加三個表,但頁面不滾動,vlay沒有顯示所有表它只是顯示它可以顯示沒有滾動的頁面。

+0

請添加代碼,您將表添加到小部件作爲有幾種方法可以做到這一點,我們無法分辨您正在使用哪一種。 – 2012-03-02 10:27:39

+0

是否需要使用VBoxLayout來顯示小部件? – abhishek 2012-03-02 10:49:41

+0

我認爲實際的問題是,你的小部件不會調整到所需的大小,以便你可以同時看到所有三個表(加上已經存在的東西),對吧? – 2012-03-02 10:55:37

回答

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

編輯:我做的東西像什麼你正在嘗試做的,前一段時間.. 這樣:用QVBoxLayout創建自定義QWidget爲member.let的號召這個對象「widgetList」。然後重新實現你需要的所有方法,爲addWidgettakeAt等。使用您的佈局列表
最後設置的widgetList小窗口爲您滾動區域.. 讓我知道..

我做這一切都是因爲QWidgetList是不是很容易使用,我需要別的東西,我已經在這裏省略..

我找到了我的一段代碼:

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

這將是你全新的Widget與佈局,其中插入您的自定義窗口小部件.. 後來我把widgetListQScrollArea部件:

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

一切對我的作品..

EDIT 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 2012-03-02 11:47:35

+0

我編輯了我的答案,因爲在這裏寫的時間太長了...... – 2012-03-02 12:06:51

+0

我沒有得到它..我已經創建了一個帶有表格小部件的自定義小部件,您可以添加一些小片段,這將是一個偉大的幫幫我。 – abhishek 2012-03-02 12:20:32

相關問題