Qt-QScrollArea使用

QScrollArea作为一个控件容器,主要用于提供横向和纵向的滚动条,常用在图片查看等场景。由于它只作为一个容器存在,所以需要为其设置一个控制:QScrollArea::setWidget(QWidget *)

QScrollArea也可以用来设计复杂的列表:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class MyScrollArea : public QScrollArea
{
public:
void MyScrollArea()
{
m_numItem = 0;
m_layout = new QVBoxLayout();
m_layout->addStretch(1);
m_widget = new QWidget();
m_widget->setLayout(m_layout);

this->setWidget(m_widget);
this->setWidgetResizable(True);
}

void addItem(QWidget* item)
{
m_layout->insertWidget(m_numItem, item);
m_numItem ++;
}

void delItem(QWidget* item)
{
m_layout->removeWidget(item);
m_numItem --;
}
}

列表项一般只需要纵向的滚动条,横向宽度保持与外部窗口一致,所以需要重写QScrollArea的resizeEvent

1
2
3
4
5
6
7
8
9
void resizeEvent(QResizeEvent* e)
{
QScrollArea::resizeEvent(e);
auto width = e->size()->width();
if (width > 0)
{
m_widget->setMaximumWidth(width);
}
}