1、概述
QScrollArea是Qt框架中的一个控件,它提供了一个可滚动的视图区域,用于显示超出视图大小的内容。这个控件非常有用,尤其是在处理大型表格、文本区域、图像集合或任何需要滚动浏览的内容时。QScrollArea本身不直接显示内容,而是将内容(通常是一个QWidget或其子类)作为其子项,并通过滚动条来访问这些内容的全部。它支持水平和垂直滚动,并且可以根据需要自动调整滚动条的出现。
2、重要方法
- setWidget(QWidget *widget):设置要显示在滚动区域中的小部件。这个小部件将作为滚动区域的内容。
- widget():返回当前设置在滚动区域中的小部件。
- setWidgetResizable(bool resizable):设置内部小部件是否可以调整大小以填充滚动区域。如果设置为true,则小部件会根据滚动区域的大小变化而调整大小。
- horizontalScrollBar() 和 verticalScrollBar():返回水平和垂直滚动条的实例。可以通过这些方法来调整滚动条的属性和行为。
- ensureVisible(int x, int y, int xmargin = 50, int ymargin = 50):确保滚动区域中的特定区域(通过x, y坐标指定)是可见的。xmargin和ymargin指定了额外边界以确保区域完全可见。
- setViewportMargins(int left, int top, int right, int bottom):设置视口(即内容显示区域)的外边距。
- setHorizontalScrollBarPolicy(Qt::ScrollBarPolicy policy):设置水平滚动条的策略。
- setVerticalScrollBarPolicy(Qt::ScrollBarPolicy policy):设置垂直滚动条的策略。
3、重要信号
- valueChanged(int value):当滚动条的值改变时发射。
#include <QApplication>  
#include <QMainWindow>  
#include <QScrollArea>  
#include <QWidget>  
#include <QVBoxLayout>  
#include <QPushButton>  
  
class MainWindow : public QMainWindow {  
    Q_OBJECT  
  
public:  
    MainWindow(QWidget *parent = nullptr) : QMainWindow(parent) {  
        // 设置窗口标题和大小  
        setWindowTitle("QScrollArea Example");  
        resize(400, 300);  
  
        // 创建一个QWidget作为滚动区域的内容  
        QWidget *contentWidget = new QWidget();  
        QVBoxLayout *layout = new QVBoxLayout(contentWidget);  
  
        // 添加多个按钮以模拟内容  
        for (int i = 0; i < 20; ++i) {  
            QPushButton *button = new QPushButton(QString("Button %1").arg(i + 1));  
            layout->addWidget(button);  
        }  
  
        // 创建QScrollArea并设置内容小部件  
        QScrollArea *scrollArea = new QScrollArea(this);  
        scrollArea->setWidget(contentWidget);  
        scrollArea->setWidgetResizable(true); // 允许内容小部件根据滚动区域的大小变化而调整大小  
  
        // 设置滚动区域的视口外边距(可选)  
        // scrollArea->setViewportMargins(10, 10, 10, 10); // 左, 上, 右, 下  
  
        // 创建一个中心部件并设置布局  
        QWidget *centralWidget = new QWidget(this);  
        QVBoxLayout *mainLayout = new QVBoxLayout(centralWidget);  
        mainLayout->addWidget(scrollArea);  
  
        // 将中心部件设置为主窗口的部件  
        setCentralWidget(centralWidget);  
    }  
};  
  
int main(int argc, char *argv[]) {  
    QApplication app(argc, argv);  
  
    // 创建并显示主窗口  
    MainWindow mainWindow;  
    mainWindow.show();  
  
    // 进入应用程序的主事件循环  
    return app.exec();  
}  

觉得有帮助的话,打赏一下呗。。
 
           



















