[Qt]如何用好QScrollArea

本文介绍如何在Qt中利用QScrollArea实现界面滚动。通过调整控件布局及设置scrollAreaWidgetContents大小,确保在界面空间受限时仍可通过滚动条查看完整内容。

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

原创文章,欢迎转载。转载请注明:转载自 祥的博客

原文链接:http://blog.csdn.net/humanking7/article/details/78559692


问题提出

有些时候,我们界面能展示的区域被限定的很小,但是需要展现的控件、内容却很多,在限定大小的区域中无法全部显示。这个时候就需要滚动条了。在Qt中有一个很好的类 QScrollArea

如下图所示,左边是界面被压缩限制时,显示的情况。右边是完全展示出的界面情况。

pic1

使用方法

本文直接用 Qt Designer 去设计ui文件,当然也可以直接在代码中写。

Step1.拖入QScrollArea

Widget box中找到QScrollArea控件,拖入窗体。

pic2

Step2.改变widget控件布局

其目的,就是让scrollArea随着窗体变化而变化。

pic3

Step3.设置scrollAreaWidgetContents大小

现在的窗体即时缩小到最小的情况,也不会出现滚动条,如下图所示。
pic4

这是因为我们没有设置scrollAreaWidgetContents这个控件的最小值。

  • 正常情况下将scrollAreaWidgetContents中的内容展示完全大小,如geometry所示为[201 x 174]
  • 将它的minimumSize设置为[200 x 170]

这样当界面的面积小于[200 x 170]时,界面就会出现滚动条。
pic5

pic6


donate

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(); } ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值