QScrollArea 最主要的方法在于setWidget(QWidget *widget)
,
简单来说就是设置画布的意思,通常我们在使用的时候需要先把需要的控件放到一个画布里。而QScrollArea 就类似于我们拿着一个放大镜去观察这个画布。所以想要出现滚动条,画布的大小一定要比QScrollArea 大!
以下代码示例:
mainLayout = new QVBoxLayout(this);
mainLayout->setContentsMargins(11, 11, 11, 11);
scroLLArea = new QScrollArea();
QWidget *scrollAreaWidgetContents = new QWidget(); //创建画布
QScreen *screen = QGuiApplication::primaryScreen();
QRect rect = screen->availableGeometry();//获取当前屏幕像素大小
scrollAreaWidgetContents->setFixedWidth(rect.width());
scrollAreaWidgetContents->setFixedHeight(rect.height() + 1800); //这里设置画布的高度比实际屏幕要大,方便出现滚动条
//创建多个控件
int initX = 35;
int initY = 0;
int fixSpace = 100;
int hX = 0;
int vY = initY;
for (int i = 1; i < 50; i++)
{
if (i % 2 != 0)
{
btnButton = new QPushButton(scrollAreaWidgetContents);
btnButton->move(initX, vY);
hX = btnButton->x() + btnButton->width() + fixSpace;
}
else
{
btnButton = new QPushButton(scrollAreaWidgetContents);
btnButton->move(hX, vY);
vY += fixSpace;
}
btnButton->setText(QString::number(i));
}
scroLLArea->setWidget(scrollAreaWidgetContents); //设置画布
mainLayout->addWidget(scroLLArea);
/*在主布局中添加QScrollArea ,
这时候因为自动布局的关系,
QScrollArea 的大小会与屏幕大小近似。
所以它的大小小于画布的大小!*/
最后,我们还可以对滚动条禁用。例如禁用横向滚动条:
scroLLArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
效果图
: