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 10
| void resizeEvent(QResizeEvent* e) { QScrollArea::resizeEvent(e); auto width = e->size()->width(); if (width > 0) { m_widget->setMaximumWidth(width); } }
|