Qt QScrollArea显示控件,并且调节控件大小

这篇具有很好参考价值的文章主要介绍了Qt QScrollArea显示控件,并且调节控件大小。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

实现效果:

Qt QScrollArea显示控件,并且调节控件大小

(1)首先要理解 QScrollArea控件出现滚动条的方式,具体参考(11条消息) QT的自动滚动区QScrollArea的用法,图文详解_暴躁的野生猿的博客-CSDN博客_qscrollareaQt QScrollArea显示控件,并且调节控件大小

 在scrollArea的子控件设置mininumSize就是显示滚动条关键;

(2)在 QScrollArea 添加自定义控件(这里以添加QPushButton)为例子;具体代码:

int leftRightMargin = 40;
int btnWidth = ui->scrollArea->width()-leftRightMargin;
int btnHeight = 20;
int elemSpaceing = 4;
int btnNum = 30;

for(int i=0; i<btnNum; i++){

            QPushButton * btn = new QPushButton("btn ************* abcd",ui->scrollAreaWidgetContents);
            btn->setGeometry(leftRightMargin/2, elemSpaceing*(i+1)+i*btnHeight, btnWidth, btnHeight);
            btn->show();
            btnGroup->addButton(btn);
}

int contextHeight = btnNum*btnHeight + (btnNum+1)*elemSpaceing;

ui->scrollAreaWidgetContents->setMinimumHeight(contextHeight);  // 将添加控件内容总高度设置MininumHeight 是出现滚动条的关键

注意: 修改一定要采用 ui->scrollArea->width(),不然在多次加载会导致计算出问题
如果采用这个计算ui->scrollAreaWidgetContents->width(),在多次加载后,大小会变,导致计算偏移,情况如图:

Qt QScrollArea显示控件,并且调节控件大小

 

第三步,在resizeEvent中,对自定义控件宽高进行调整,实现布局效果;

void MainWindow::resizeEvent(QResizeEvent *event)
{
    int leftRightMargin = 40;
    // 修改一定要采用 ui->scrollArea->width(),不然在多次加载会导致计算出问题
    // 如果采用这个计算ui->scrollAreaWidgetContents->width(),在多次加载后,大小会变,
    // 导致计算偏移
    
    int btnWidth = ui->scrollArea->width()-leftRightMargin;
    int btnHeight = 20;
    int elemSpaceing = 4;

    int i=0;
    for(QAbstractButton * btn : btnGroup->buttons()){
        btn->setGeometry(leftRightMargin/2, elemSpaceing*(i+1)+i*btnHeight, btnWidth, btnHeight);
        i++;
    }

    QMainWindow::resizeEvent(event);
}

完整代码:文章来源地址https://www.toymoban.com/news/detail-501807.html

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QResizeEvent>
#include <QPushButton>
#include <QTimer>
#include <QDebug>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    btnGroup = new QButtonGroup(this);

    // 延迟加载,不然得到ui->scrollAreaWidgetContents->width()会异常

    QTimer::singleShot(500, this, [this]()
    {
        int leftRightMargin = 40;
        int btnWidth = ui->scrollArea->width()-leftRightMargin;
        int btnHeight = 20;
        int elemSpaceing = 4;
        int btnNum = 30;

        for(int i=0; i<btnNum; i++){

            QPushButton * btn = new QPushButton("btn ************* abcd",ui->scrollAreaWidgetContents);
            btn->setGeometry(leftRightMargin/2, elemSpaceing*(i+1)+i*btnHeight, btnWidth, btnHeight);
            btn->show();
            btnGroup->addButton(btn);
        }

        int contextHeight = btnNum*btnHeight + (btnNum+1)*elemSpaceing;

        ui->scrollAreaWidgetContents->setMinimumHeight(contextHeight);

    });
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::resizeEvent(QResizeEvent *event)
{
    int leftRightMargin = 40;
    int btnWidth = ui->scrollArea->width()-leftRightMargin;
    int btnHeight = 20;
    int elemSpaceing = 4;

    int i=0;
    for(QAbstractButton * btn : btnGroup->buttons()){
        btn->setGeometry(leftRightMargin/2, elemSpaceing*(i+1)+i*btnHeight, btnWidth, btnHeight);
        i++;
    }

    QMainWindow::resizeEvent(event);
}

到了这里,关于Qt QScrollArea显示控件,并且调节控件大小的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Qt QScrollArea使用

    在使用QScrollArea时,有几个注意事项需要考虑: 设置合适的小部件(widget)大小策略 : 确保将要放置在QScrollArea中的小部件设置为合适的大小策略。这将确保小部件可以根据需要进行扩展,以适应滚动区域的大小。 设置滚动区域的小部件 : 使用QScrollArea的setWidget方法将小部

    2024年02月11日
    浏览(30)
  • 【QT】一 设置布局后,控件大小会自动变化,如何设置想要的

    目录 1. 设置好控件大小 2. 设置布局  3. 设置layout  给一个QWidget控件内部设置布局后,原来内部的控件大小变小了,如何解决?           把最小值设置好。         选择整体,选择布局方式,这里为水平布局。 你会发现,可能显示不全。 选择整体,属性拉到最下面,

    2024年02月11日
    浏览(73)
  • QT 之自动滚动区QScrollArea

    QScrollArea提供了一个滚动视图到另一个部件。 滚动区域用于显示一个画面中的子部件的内容。如果部件超过画面的大小,视图可以提供滚动条,这样就都可以看到部件的整个区域。 QScrollArea属于控件容器类,可以直接在ui中拖出来 添加需要放置的控件到QScrollArea里面,然后栅

    2024年02月12日
    浏览(47)
  • VS+Qt设置窗口尺寸(二):窗体控件自适应窗口布局,自动调整大小

    VS版本:VS2019 QT版本:Qt5.12.3(msvc2017_64) 为了适配不同尺寸的显示屏,软件窗口需要调整大小,窗口内的控件尺寸也要适配窗口的大小。 本例重点讲述如何设置可调整尺寸的窗口及控件,实现窗口最大化和尺寸调节。 本例使用相对简单的按键和文本框来做示例,其他控件均可

    2023年04月23日
    浏览(104)
  • Vue3 el-tooltip 根据内容控制宽度大小换行和并且内容太短不显示

    tooltip 根据内容自动换行 如果内容超出显示省略号显示,不超出不显示 tooltip 组件 使用

    2024年02月09日
    浏览(45)
  • Qt Scroll Area控件设置,解决无法显示全部内容,且无法滚动显示问题。

    前言,因为要显示很多条目的内容,原来是用Vertical Layout控件里面嵌套Horizontal layout显示了很多行控件,发现最简单的方法就是使用滚动条控件,但是无论如何调整需要滚动的控件高度,始终无法滚动显示内容。也就是说添加后,发现没有滚动条,也无法显示超出控件范围的

    2024年02月11日
    浏览(39)
  • 【Qt】根据界面所在显示器自适应调整ui大小

    使用QDesktopWidget、QApplication::screens()等获取屏幕宽高、DPI等信息,详见上一篇概述。 我们需要将窗口、布局和控件的大小类型(size type)设置为相对单位,如: 设置窗口的尺寸策略为Qt::SizePolicy::Expanding 使用setBaseSize() + setSizeIncrement() 使窗口大小可根据屏幕比例增长 使用 percentages 而

    2023年04月26日
    浏览(38)
  • 小白教程:PyQt5点击按钮,调用笔记本电脑摄像头将实时画面显示在label控件上,并且使用UI代码和逻辑代码分开的方式

    能力一般,水平有限,真心欢迎批评指正!以后会不断完善修改,如果对你有帮助欢迎点赞收藏! 小白教程,当我们掌握了一点点的Qt Designer的技能,得意于能够在界面上作画的时候,怎么编写其中的逻辑关系是我们进一步想要了解的,下面介绍了 点击按钮--调用笔记本电脑

    2024年01月17日
    浏览(92)
  • 【[Qt]基于QGraphicsView的图像显示控件,支持放大、缩小、鼠标拖动】

    ImageViewer.h文件 ImageViewer.cpp 文件 具体使用代码如下 1、初始化类对象,并加入界面布局中 2、打开图像,并加载到控件中 3、从控件中卸载图片 源码链接:https://download.csdn.net/download/xiaohuihuihuige/87239431 百度云: 链接:https://pan.baidu.com/s/1W-KUlIKUFAktUKFin63N0g 提取码:4g8a

    2024年02月11日
    浏览(57)
  • Qt解析含颜色的QString字符串显示到控件

    1、需求 开发接收含颜色字符串显示到窗口,可解析字符串颜色配置窗口属性,且分割字符串显示。 mprintf(“xxxxxx”);打印的xxxxxx含有颜色配置。 2、实现方法 2.1、条件 选用Qt的PlainTextEdit控件显示字符串,配置为只读模式 初始化串口成功后,用下列代码绑定串口信号,收到

    2024年01月25日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包