有些时候,我们界面能展示的区域被限定的很小,但是需要展现的控件、内容却很多,在限定大小的区域中无法全部显示。这个时候就需要滚动条了。在Qt中有一个很好的类 QScrollArea
。
有两种方式可是实现滚动区域:
第一种直接用 Qt Designer 去设计ui文件:
拖入QScrollArea然后进行布局即可。
第二种是代码实现:
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); // 手动调整大小
scrollArea->setWidgetResizable(true); // 自动调整大小
获取与移除部件
获取
可以通过widget()函数来获取滚动区域的部件,如果没有,则返回0。
QWidget *widget = scrollArea->widget();
QLabel *pLabel = qobject_cast<QLabel *>(widget);
如果部件是一个QWidget的子类,可以用qobject_cast进行类型转换。
移除
如果要将部件从滚动区域中移除(即:在上例中,滚动区域不再显示图片),使用takeWidget()函数。
QWidget *widget = scrollArea->takeWidget();
QLabel *pLabel = qobject_cast<QLabel *>(widget);
移除的同时,会将部件的所有权传递到调用者,可以用QWidget来接收。