当前位置: 首页 > article >正文

qt QScrollArea详解

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();  
}  

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

           


http://www.kler.cn/a/378094.html

相关文章:

  • SpringBoot在线教育系统:集成第三方服务
  • C语言数据库探索:适合初学者,探索C语言如何与数据库交互
  • 独孤思维:工作被骂,副业停滞,算个屁
  • LeetCode //C - 447. Number of Boomerangs
  • Oceanbase学习之一迁移mysql数据到oceanbase
  • 常用的 Lambda 表达式案例解析
  • Git 的特殊配置文件
  • FPGA实现串口升级及MultiBoot(十一)QuickBoot介绍
  • ‌MySQL中‌between and的基本用法‌、范围查询
  • 干货|前端项目一些响应式布局问题(固定宽度仍可以实现响应式)
  • CTF-pwn:libc2.27指针劫持[gyctf_2020_signin]
  • 通过不当变更导致 PostgreSQL 翻车的案例分析与防范
  • WeakReference与SoftReference以及结合ReferenceQueue实践整理
  • AppInventor2能否用网络摄像头画面作为屏幕的背景?
  • Golang--函数、包、defer、系统函数、内置函数
  • thinkphp8模型中 where数组条件大于,小于,like等条件时与tp5/6 的区别和使用示例
  • 3.3_JavaScript 对象与事件
  • 湖南(市场研究)源点咨询 市场调研公司与咨询公司有何不同?
  • Leetcode 腐烂的橘子
  • docker理论+部署(一)
  • masm汇编debug调试字符串大小写转换演示
  • 职场中这样汇报工作领导才满意
  • Milvus - 相似度量详解
  • HarmonyOS 5.0应用开发——用户文件操作
  • git入门教程9:配置Git钩子
  • 线程数组一例