我在包含表格小部件和标签的小部件中动态添加三个表,但屏幕上没有显示任何内容,我尝试使用垂直布局但是如果我添加新行则不会展开,因此不会滚动。 有没有其他方法可以通过滚动将所有三个表放在同一页面上。
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 :(得分:2)
尝试重写代码:
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);
编辑:我做了类似你之前想做的事情......
所以:使用QWidget
创建一个自定义QVBoxLayout
作为member.let,调用此对象“widgetList”。然后重新实现您需要的所有方法,例如addWidget
,takeAt
等。使用您的布局作为列表我做了所有这些因为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);
一切都适合我......
编辑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();