嘗試重寫代碼,因爲這:
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」。然後重新實現你需要的所有方法,爲addWidget
,takeAt
等。使用您的佈局列表
最後設置的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與佈局,其中插入您的自定義窗口小部件.. 後來我把widgetList
爲QScrollArea
部件:
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();
請添加代碼,您將表添加到小部件作爲有幾種方法可以做到這一點,我們無法分辨您正在使用哪一種。 – 2012-03-02 10:27:39
是否需要使用VBoxLayout來顯示小部件? – abhishek 2012-03-02 10:49:41
我認爲實際的問題是,你的小部件不會調整到所需的大小,以便你可以同時看到所有三個表(加上已經存在的東西),對吧? – 2012-03-02 10:55:37