如何在qt中的滚动条中动态添加多个表

  • 本文关键字:添加 动态 qt 滚动条 qt qt4
  • 更新时间 :
  • 英文 :


我在包含表小部件和标签的小部件中动态添加了三个表,但屏幕上什么都没有显示,我曾尝试过垂直布局,但如果添加新行,它不会扩展,所以不会滚动。有没有其他方法可以通过滚动将三个表都放在同一页上。

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并没有显示所有的表,它只是显示了在不滚动的情况下可以在页面中显示的内容。

尝试将代码重写为:

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。让我们将此对象称为"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();
}

这将是您的新窗口小部件,具有插入自定义窗口小部件的布局。。然后我把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();

最新更新