摘要: 簡要說明如何在QScrollArea滾動窗口中添加多個QWidget的使用方法。
根據(jù)自己目前的需求簡單說下怎么在QScrollArea滾動窗口中實(shí)現(xiàn)多個控件的滾動顯示垢箕,先看看最終效果:
![效果](http://ovormws1o.bkt.clouddn.com/134010_BaU7_2660258.png)
效果
先說一下在QScrollArea滾動窗口中要添加控件要使用QScrollArea::setWidget(QWidget * widget)這個函數(shù)划栓,當(dāng)添加的控件顯示范圍大于scrollArea則會出現(xiàn)滾動條,但是從名字可以看出這個函數(shù)是用于設(shè)置一個QWidget条获,而不能用于不斷的添加QWidget,所以這里面并不能像大家想的那樣來直接實(shí)現(xiàn)上面的效果帅掘,而是需要創(chuàng)建一個自己的QWidget,再在其中來添加自己需要的控件修档。
下面給出代碼看看,由于我的滾動窗口是已經(jīng)用設(shè)計(jì)器添加到對話框上的吱窝,所以我直接用ui->scrollArea來調(diào)用迫靖,buttonListWidget是我重新實(shí)現(xiàn)的QWidget子類兴使,等會在下面可以看到實(shí)現(xiàn)代碼:
buttonListWidget *buttonList = new buttonListWidget(this);
buttonList->initWidget(strList);
ui->scrollArea->setWidget(buttonList);
buttonListWidget類,其實(shí)內(nèi)容不多蜈首,但是主要是掌握到方法:
buttonListWidget.h
class buttonListWidget : public QWidget
{
Q_OBJECT
public:
explicit buttonListWidget(QWidget *parent = 0);
void initWidget(QStringList& nameList);
signals:
public slots:
};
buttonListWidget.cpp
buttonListWidget::buttonListWidget(QWidget *parent) : QWidget(parent)
{
}
void buttonListWidget::initWidget(QStringList &nameList)
{
QHBoxLayout *layout = new QHBoxLayout(this);
foreach (QString str, nameList)
{
QPushButton *button = new QPushButton(str, this);
button->setMinimumSize(button->size());
layout->addWidget(button);
}
this->setLayout(layout);
}