QT 之自动滚动区QScrollArea

本文介绍了如何使用Qt的QScrollArea组件来创建一个可滚动的视图,展示超过屏幕大小的部件内容。通过在QScrollArea内添加栅格布局,并在代码中动态创建和定位多个按钮,实现了滚动条的出现。同时,详细说明了如何在QtDesigner中直接拖放QScrollArea以及设置其大小和内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简述

QScrollArea提供了一个滚动视图到另一个部件。

滚动区域用于显示一个画面中的子部件的内容。如果部件超过画面的大小,视图可以提供滚动条,这样就都可以看到部件的整个区域。

Qt Designer设计添加

  1. QScrollArea属于控件容器类,可以直接在ui中拖出来
  2. 添加需要放置的控件到QScrollArea里面,然后栅格布局
    在这里插入图片描述
  3. 栅格以后调整外部大小就可以设定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 的大小会与屏幕大小近似。
   所以它的大小小于画布的大小!*/

Qt中的`QScrollArea`是一个用于显示内容超出其窗口大小的小部件,当内容过大无法一次性展示完全时,它会自动添加滚动条以便用户可以查看所有内容。你可以将任何QWidget类型的控件放入到`QScrollArea`中,并设置它的布局、边距等属性。 下面是一些关键点: - **构造函数**:创建一个新的 `QScrollArea` 实例。 - **setWidget(QWidget *widget)** :此方法用于向 QScrollArea 中放置一个小部件作为滚动区域的内容。请注意每个 QScrollArea 只能包含一个主小部件;如果你想在同一域内管理多个组件,则需要先在一个容器(例如 QVBoxLayout 或 QHBoxLayout 内的一个 QWidget)里布置好它们再把该容器加入到 QScrollArea 之中。 - **setVerticalScrollBarPolicy(Qt::ScrollBarPolicy policy) 和 setHorizontalScrollBarPolicy(Qt::ScrollBarPolicy policy)** : 设置垂直方向或水平方向上是否始终显示滚动条 (`Qt::ScrollBarAlwaysOn`) ,仅在必要时才出现滚动条(`Qt::ScrollBarAsNeeded`) , 或者从不显示滚动条 (`Qt::ScrollBarAlwaysOff`). 这里有一个简单的例子演示如何使用QScrollArea: ```cpp #include <QApplication> #include <QLabel> #include <QVBoxLayout> #include <QWidget> #include <QScrollArea> int main(int argc, char *argv[]) { QApplication app(argc, argv); // 创建一个较大的 QLabel 来模拟大尺寸内容. QLabel* label = new QLabel("这是一个非常大的文本标签..."); QFont font; font.setPointSize(40); // 增加字体大小以保证内容足够大而触发滚动效果. label->setFont(font); // 将这个 QLabel 放入 Scroll Area . QScrollArea scroll_area; scroll_area.setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn); scroll_area.setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); scroll_area.setWidget(label); // 显示带了 Label 的 Scroll Area 窗口. scroll_area.show(); return app.exec(); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值