QScrollArea

main.cpp

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <QApplication>
#include <QWidget>
#include <QScrollArea>
#include <QVBoxLayout>
#include <QPushButton>
#include <QLabel>

void setupScrollAreaDemo(QWidget *parent) {
QVBoxLayout *mainLayout = new QVBoxLayout(parent);

// --- 1. 创建滚动区域控件 ---
QScrollArea *scrollArea = new QScrollArea(parent);

// --- 2. 创建一个“容器” Widget,用来装所有内容 ---
QWidget *container = new QWidget();
QVBoxLayout *containerLayout = new QVBoxLayout(container);

// --- 3. 往容器里塞很多很多内容,让它超出屏幕 ---
for (int i = 1; i <= 30; ++i) {
QString txt = QString("这是第 %1 行测试内容").arg(i);
containerLayout->addWidget(new QPushButton(txt, container));
}

// --- 4. 将容器装进滚动区域 ---
scrollArea->setWidget(container);

// --- 5. 关键设置:让容器宽度自动适应滚动区域 ---
// 如果不设这个,容器会保持原始大小,可能出现水平滚动条
scrollArea->setWidgetResizable(true);

// 设置滚动条策略:按需显示(默认)
scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);

mainLayout->addWidget(new QLabel("下方是一个可以滚动的区域:"));
mainLayout->addWidget(scrollArea);
}

int main(int argc, char *argv[]) {
QApplication a(argc, argv);
QWidget w;
w.setWindowTitle("QScrollArea 滚动测试");
w.resize(300, 400); // 故意给个小窗口
setupScrollAreaDemo(&w);
w.show();
return a.exec();
}