简述
QScrollArea类提供了一个窗口小部件的滚动视图。
滚动区域用于显示框架内子窗口小部件的内容。如果窗口小部件超出框架的大小,则视图可以提供滚动条,以便可以查看子窗口小部件的整个区域。子窗口小部件必须使用setWidget()指定。
QScrollArea中的很多功能继承自QAbstractScrollArea。
功能详述
滚动条的外观取决于当前设置的滚动条策略。您可以使用QAbstractScrollArea继承的功能来控制滚动条的外观。
例如,可以设置QAbstractScrollArea :: horizontalScrollBarPolicy和QAbstractScrollArea :: verticalScrollBarPolicy属性。或者,如果希望在滚动区域的内容发生变化时动态调整滚动条,则可以使用horizontalScrollBar()和verticalScrollBar()函数(使您能够访问滚动条),并使用QScrollBar :: setValue()函数更改滚动区域的内容。
您可以使用widget()函数检索子控件。可以使用setWidgetResizable()函数将视图调整大小。可以使用setAlignment()指定窗口小部件的对齐方式。
有两个便捷功能:ensureVisible() 和 ensureWidgetVisible(),通过确保在需要时滚动内容,可以确保内容的特定区域在视口中可见。
使用滚动区域显示自定义窗口小部件的内容时,重要的是确保将子窗口小部件的默认大小设置为合适的值。
如果将标准QWidget用于子窗口小部件,则可能有必要调用QWidget :: setMinimumSize()以确保在滚动区域内正确显示窗口小部件的内容。
如果滚动区域用于显示包含布局的窗口小部件
的内容,则意识到布局的大小策略也将确定窗口小部件的大小是非常重要的。这对于了解是否打算动态更改布局的内容特别有用。在这种情况下,将布局的大小约束属性设置为一个对布局的最小和/或
最大尺寸提供约束的属性(例如QLayout :: SetMinAndMaxSize)将导致滚动区域的大小在每当滚动条的内容被更新时更新。
用法
效果
源码
QLabel *imageLabel = new QLabel;
imageLabel->setScaledContents(true);
QImage image(":/picture/qqhead.png");
imageLabel->setPixmap(QPixmap::fromImage(image));
QScrollArea *scrollArea = new QScrollArea;
scrollArea->setBackgroundRole(QPalette::Dark);
scrollArea->setWidget(imageLabel);
QGridLayout *gridLayout = new QGridLayout;
gridLayout->addWidget(scrollArea);
this->setLayout(gridLayout);
this->resize(200, 200);
重点提要: 用setWidget来设置控件到QScrollArea中。
常用设置
设置内部控件对齐
默认对齐在左上角,如下所示
可以通过setAlignment来设置
scrollArea->setAlignment(Qt::AlignHCenter);
效果
设置QScrollArea是否可调整内部控件尺寸
默认情况下,QScrollArea不会对内部控件的大小做出任何调整,如果内部控件大小改变了,QScrollArea要调整自身以适应内部控件,设置方法如下
scrollArea->setWidgetResizable(true);
默认情况下
调整后
设置滚动条位置
这个方法继承自QAbstractStrollArea,用于设置滚动条在什么情况下可见,三种情况如下所示
常量 | 值 | 描述 |
---|---|---|
Qt::ScrollBarAsNeeded | 0 | 当需要的时候出现滚动条 |
Qt::ScrollBarAlwaysOff | 1 | 滚动条总是关闭 |
Qt::ScrollBarAlwaysOn | 2 | 滚动条总是出现 |
scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
效果
总结
上面的内容简要介绍了QStrollArea的基本用法,以及常用设置,更多功能可以参考它的父类QAbstractScrollArea,并结合官方案例中的Image Viewer Example进行学习与理解。
引用
[1] Qt助手