简述
- QScrollArea提供了一个滚动视图到另一个部件。
- 滚动区域用于显示一个画面中的子部件的内容。如果部件超过画面的大小,视图可以提供滚动条,这样就都可以看到部件的整个区域。
基本使用
- QScrollArear容器里面的子部件必须使用
setWidget()
指定 - 可以使用
widget()
函数来获取部件,视图可以使用setWidgetResizable()
函数来调整大小。 - 有两个便利的函数:
ensureVisible()
和ensureWidgetVisible()
,确保视口中的一定区域内容是可见的,必要时通过滚动内容。
QLabel *imageLabel =new QLabel(this);
imageLabel->setPixmap(QPixmap(":/Images/head"));
QScrollArea *scrollArea =new QScrollArea(this);
scrollArea->setBackgroundRole(QPalette::Dark);
scrollArea->setWidget(imageLabel);
对齐方式
- 默认子部件的对齐方式为:水平居左,垂直居上。可以通过
setAlignment(Qt::Alignment)
来改变。 Qt::Alignment
有很多可选项,分别表示水平和垂直方向的对齐方式,例如:左上右下。
scrollArea->setAlignment(Qt::AlignCenter);
scrollArea->setAlignment(Qt::AlignLeft);
scrollArea->setAlignment(Qt::AlignRight);
scrollArea->setAlignment(Qt::AlignHCenter);
scrollArea->setAlignment(Qt::AlignVCenter);
scrollArea->setAlignment(Qt::AlignBottom);
scrollArea->setAlignment(Qt::AlignTop);
调整子部件大小
- 默认情况下属性
widgetResizable
为false。即滚动不会改变widget的大小,也就是说QLabel子部件自适应QPixmap的大小。 - 如果要调整部件大小,有两种可选方式。一般用
自动调整
setWidgetResizable(true)
手动调整
- 忽略这个属性,我们可以通过使用
widget()->resize()
来调整部件的大小,这时滚动区域会自动调整自身大小为新的尺寸。
QLabel *imageLabel =new QLabel(this);
QPixmap pixmap(":/Images/head");
pixmap = pixmap.scaled(200, 200, Qt::KeepAspectRatio);
imageLabel->setPixmap(pixmap);
imageLabel->setStyleSheet("background: white;");
imageLabel->setAlignment(Qt::AlignCenter);
QScrollArea *scrollArea =new QScrollArea(this);
scrollArea->setBackgroundRole(QPalette::Dark);
scrollArea->setWidget(imageLabel);
scrollArea->setAlignment(Qt::AlignCenter);
scrollArea->widget()->resize(260, 260);
自动调整【常用】
- 如果
widgetResizable
被设置为true,则滚动区域子部件将自动调整,以避免可以不显示的滚动条,或者利用额外的空间。
QLabel *imageLabel =new QLabel(this);
QPixmap pixmap(":/Images/head");
pixmap = pixmap.scaled(200, 200, Qt::KeepAspectRatio);
imageLabel->setPixmap(pixmap);
imageLabel->setStyleSheet("background: white;");
imageLabel->setAlignment(Qt::AlignCenter);
QScrollArea *scrollArea =new QScrollArea(this);
scrollArea->setBackgroundRole(QPalette::Dark);
scrollArea->setWidget(imageLabel);
scrollArea->setAlignment(Qt::AlignCenter);
scrollArea->setWidgetResizable(true);
获取与移除部件
获取
- 可以通过
widget()
函数来获取滚动区域的部件,如果没有,则返回0。
QWidget *widget = scrollArea->widget();
移除
- 如果要将部件从滚动区域中移除(即:在上例中,滚动区域不再显示图片),使用
takeWidget()
函数。
QWidget *widget = scrollArea->takeWidget();