Как динамически добавить несколько таблиц в скроллере в qt - PullRequest
2 голосов
/ 02 марта 2012

Я добавляю три таблицы динамически в виджет, содержащий виджет и метки таблиц, но на экране ничего не отображается, я пытался сделать это с вертикальным расположением, но он не расширяется, если я добавляю новую строку, поэтому не прокручиваю. Есть ли другой способ получить все три таблицы на одной странице с прокруткой.

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 не показывает все таблицы, он просто показывает, что можно показать на странице без прокрутки.

1 Ответ

2 голосов
/ 02 марта 2012

попробуйте переписать код следующим образом:

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 и т. д., используя макет в виде списка
наконец установите 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...