Qt非QListWidget的QWidget窗体部分滚动---QScrollArea滚动区

2024-02-07 23:18

本文主要是介绍Qt非QListWidget的QWidget窗体部分滚动---QScrollArea滚动区,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

实现效果:(确认按钮固定,上方内容右侧有滚动条可上下滑动)

第一次做滚动区,想通过QVboxLayout在上面做一个固定QWidget,限制其高度,让他达到滚动的目的,做成了下面这个模样

2、通过网上查找方法知道了滚动区QScrollArea类可以实现区域内容滚动效果

*QScrollArea布局是出现滚动条的原因,主要是因为其中包含了一个子类scrllAreaWidgetContents,是小widget套一个大widget实现内部装不下而出现滚动效果。

步骤如下:

1)new QScrollArea;

2)new QFrame;

3)new QLabel,QPushButton等内部布局控件;

4)将内部控件装入内部布局QFrame;

5)将QFrame内部布局装入QScrollArea

Public Functions

 

QScrollArea(QWidget *parent = nullptr)

virtual

~QScrollArea()

Qt::Alignment

alignment() const

void

ensureVisible(int x, int y, int xmargin = 50, int ymargin = 50)

void

ensureWidgetVisible(QWidget *childWidget, int xmargin = 50, int ymargin = 50)

void

setAlignment(Qt::Alignment)

void

setWidget(QWidget *widget)

void

setWidgetResizable(bool resizable)

QWidget *

takeWidget()

QWidget *

widget() const

bool

widgetResizable() const

/*添加窗体内部滚动布局*/
void addTrunk()
{scrollArea = new QScrollArea(this);scrollArea->setGeometry(0, 50, 360, 450);/*左上长宽*/QFrame * widget = new QFrame(this);widget->setContentsMargins(0, 0, 0, 0);widget->setFixedSize(350, 590);m_pTrunk = new QVBoxLayout(widget);m_pTrunk->setContentsMargins(15, 0, 20, 10);m_pTrunk->setSpacing(10);QLabel *roomName = new QLabel;roomName->setText(u8"房间名:");roomName->setObjectName("editroom_topic");QTextEdit *roomNameEdit = new QTextEdit;roomNameEdit->setFixedWidth(331);roomNameEdit->setFixedHeight(54);roomNameEdit->setPlaceholderText(QStringLiteral("请输入房间名"));roomNameEdit->setObjectName("grey_4r_textedit");QLabel *roomNoticeTitle = new QLabel;roomNoticeTitle->setText(u8"公告标题(限10个字):");roomNoticeTitle->setObjectName("editroom_topic");m_pNoticeTitleRegister = new QLabel();  //计数器m_pNoticeTitleRegister->setGeometry(100, 250, 58, 18);m_pNoticeTitleRegister->setStyleSheet("QLabel{color:#95949D;font:14px;}");roomNoticeTitleEdit = new QLineEdit;roomNoticeTitleEdit->setFixedWidth(250);roomNoticeTitleEdit->setFixedHeight(30);roomNoticeTitleEdit->setPlaceholderText(QStringLiteral("请输入公告标题"));roomNoticeTitleEdit->setObjectName("grey_4r_lineedit_register");roomNoticeTitleEdit->setMaxLength(10);connect(roomNoticeTitleEdit, SIGNAL(textEdited()), this, SLOT(slot_scalerNoticeTitleText()));QLabel *roomNotice = new QLabel;roomNotice->setText(u8"房间公告(限300个字):");roomNotice->setObjectName("editroom_topic");m_pNoticeRegister = new QLabel();  //计数器m_pNoticeRegister->setGeometry(100, 450, 58, 18);m_pNoticeRegister->setStyleSheet("QLabel{color:#95949D;font:14px;}");roomNoticeEdit = new QTextEdit;roomNoticeEdit->setFixedWidth(314);roomNoticeEdit->setFixedHeight(110);roomNoticeEdit->setPlaceholderText(QStringLiteral("请输入房间公告..."));roomNoticeEdit->setObjectName("grey_4r_textedit_Register");roomNoticeEdit->setMaximumWidth(10);connect(roomNoticeEdit, SIGNAL(textChanged()), this, SLOT(slot_scalerNoticeText()));QLabel *roomWelcome = new QLabel;roomWelcome->setText(u8"欢迎语(限300个字):");roomWelcome->setObjectName("editroom_topic");m_pWelcomeRegister = new QLabel();  //计数器m_pWelcomeRegister->setGeometry(100, 650, 58, 18);m_pWelcomeRegister->setStyleSheet("QLabel{color:#95949D;font:14px;}");roomWelcomeEdit = new QTextEdit;roomWelcomeEdit->setFixedWidth(314);roomWelcomeEdit->setFixedHeight(110);roomWelcomeEdit->setPlaceholderText(QStringLiteral("请输入欢迎语..."));//roomWelcomeEdit->setHtml(QString("<font color=\"#95949D\">%1</font>").arg(QStringLiteral("  请输入欢迎语...")));roomWelcomeEdit->setObjectName("grey_4r_textedit_Register");connect(roomWelcomeEdit, SIGNAL(textChanged()), this, SLOT(slot_scalerWelcomeText()));QLabel *roomKey = new QLabel;roomKey->setText(u8"房间密码:");roomKey->setObjectName("editroom_topic");QLineEdit *roomKeyEdit = new QLineEdit;roomKeyEdit->setFixedWidth(331);roomKeyEdit->setFixedHeight(30);roomKeyEdit->setPlaceholderText(QStringLiteral("请输入4位房间密码..."));roomKeyEdit->setObjectName("grey_4r_lineedit");QRegExp regx("[0-9]+$");QValidator *validator = new QRegExpValidator(regx, roomKeyEdit);roomKeyEdit->setValidator(validator);roomKeyEdit->setMaxLength(4);/*结合计数器和edit*/QWidget *m_pNoticeTitleBar = new QWidget;m_pNoticeTitleBar->setContentsMargins(0, 0, 0, 0);m_pNoticeTitleBar->setFixedWidth(330);m_pNoticeTitleBar->setFixedHeight(30);m_pNoticeTitleBar->setObjectName("edit_Register_bar");QVBoxLayout *m_pNoticeTitleBox = new QVBoxLayout(m_pNoticeTitleBar);m_pNoticeTitleBox->addWidget(roomNoticeTitleEdit, 0, Qt::AlignLeft);QWidget *m_pNoticeBar = new QWidget;m_pNoticeBar->setFixedHeight(120);m_pNoticeBar->setFixedWidth(330);m_pNoticeBar->setObjectName("edit_Register_bar");QVBoxLayout *m_pNoticeBox = new QVBoxLayout(m_pNoticeBar);m_pNoticeBox->addWidget(roomNoticeEdit, 0, Qt::AlignTop | Qt::AlignLeft);m_pNoticeBox->addWidget(m_pNoticeRegister, 0, Qt::AlignTrailing | Qt::AlignRight);m_pNoticeBox->addSpacing(2);QWidget *m_pWelcomeBar = new QWidget;m_pWelcomeBar->setFixedHeight(120);m_pWelcomeBar->setFixedWidth(330);m_pWelcomeBar->setObjectName("edit_Register_bar");QVBoxLayout *m_pNoticeWelcomeBox = new QVBoxLayout(m_pWelcomeBar);m_pNoticeWelcomeBox->addSpacing(-6);m_pNoticeWelcomeBox->addWidget(roomWelcomeEdit, 0, Qt::AlignTop | Qt::AlignLeft);m_pNoticeWelcomeBox->addWidget(m_pWelcomeRegister, 0, Qt::AlignTrailing | Qt::AlignRight);m_pNoticeWelcomeBox->addSpacing(2);m_pTrunk->addWidget(roomName, 0, Qt::AlignLeft);m_pTrunk->addWidget(roomNameEdit, 0, Qt::AlignLeft);m_pTrunk->addWidget(roomNoticeTitle, 0, Qt::AlignLeft);m_pTrunk->addWidget(m_pNoticeTitleBar, 0, Qt::AlignLeft);m_pTrunk->addWidget(roomNotice, 0, Qt::AlignLeft);m_pTrunk->addWidget(m_pNoticeBar, 0, Qt::AlignLeft);m_pTrunk->addWidget(roomWelcome, 0, Qt::AlignLeft);m_pTrunk->addWidget(m_pWelcomeBar, 0, Qt::AlignLeft);m_pTrunk->addWidget(roomKey, 0, Qt::AlignLeft);m_pTrunk->addWidget(roomKeyEdit, 0, Qt::AlignLeft);widget->setLayout(m_pTrunk);scrollArea->setWidget(widget);widget->setObjectName("we");widget->setStyleSheet("QFrame#we{background:white;}");
}

*QFrame与QWidget的区别:

QFrame是基本控件的基类,QWidget是QFrame基类,关系如下:

QPushButton,QLabel… -> QFrame ->QWidget

3.无法改变滚动区背景颜色

QScrollArea 是无法通过样式表来改变背景色的,只能设置加入到QScrollArea里面的QWidget的样式,这样才能改变背景色。

当然也可以通过函数来设置QScollArea的背景色。

scrollArea->setBackgroundRole(QPalette::Dark);  // 背景色

4.setVerticalScrollMode(QAbstractItemView::ScrollMode::ScrollPerPixel);

enum QAbstractItemView::ScrollMode

Describes how the scrollbar should behave. When setting the scroll mode to ScrollPerPixel the single step size will adjust automatically unless it was set explicitly using setSingleStep(). The automatic adjustment can be restored by setting the single step size to -1.

描述滚动条的行为方式。将滚动模式设置为ScrollPerPixel时,除非使用setsingleStep()显式设置,否则单步大小将自动调整。通过将单步大小设置为-1,可以恢复自动调整。

Constant

Value

Description

QAbstractItemView::ScrollPerItem

0

The view will scroll the contents one item at a time.

QAbstractItemView::ScrollPerPixel

1

The view will scroll the contents one pixel at a time.

This enum was introduced or modified in Qt 4.2.

这篇关于Qt非QListWidget的QWidget窗体部分滚动---QScrollArea滚动区的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/689221

相关文章

基于Qt开发一个简单的OFD阅读器

《基于Qt开发一个简单的OFD阅读器》这篇文章主要为大家详细介绍了如何使用Qt框架开发一个功能强大且性能优异的OFD阅读器,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 目录摘要引言一、OFD文件格式解析二、文档结构解析三、页面渲染四、用户交互五、性能优化六、示例代码七、未来发展方向八、结论摘要

python与QT联合的详细步骤记录

《python与QT联合的详细步骤记录》:本文主要介绍python与QT联合的详细步骤,文章还展示了如何在Python中调用QT的.ui文件来实现GUI界面,并介绍了多窗口的应用,文中通过代码介绍... 目录一、文章简介二、安装pyqt5三、GUI页面设计四、python的使用python文件创建pytho

QT实现TCP客户端自动连接

《QT实现TCP客户端自动连接》这篇文章主要为大家详细介绍了QT中一个TCP客户端自动连接的测试模型,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录版本 1:没有取消按钮 测试效果测试代码版本 2:有取消按钮测试效果测试代码版本 1:没有取消按钮 测试效果缺陷:无法手动停

基于Qt实现系统主题感知功能

《基于Qt实现系统主题感知功能》在现代桌面应用程序开发中,系统主题感知是一项重要的功能,它使得应用程序能够根据用户的系统主题设置(如深色模式或浅色模式)自动调整其外观,Qt作为一个跨平台的C++图形用... 目录【正文开始】一、使用效果二、系统主题感知助手类(SystemThemeHelper)三、实现细节

Qt实现文件的压缩和解压缩操作

《Qt实现文件的压缩和解压缩操作》这篇文章主要为大家详细介绍了如何使用Qt库中的QZipReader和QZipWriter实现文件的压缩和解压缩功能,文中的示例代码简洁易懂,需要的可以参考一下... 目录一、实现方式二、具体步骤1、在.pro文件中添加模块gui-private2、通过QObject方式创建

Qt QWidget实现图片旋转动画

《QtQWidget实现图片旋转动画》这篇文章主要为大家详细介绍了如何使用了Qt和QWidget实现图片旋转动画效果,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、效果展示二、源码分享本例程通过QGraphicsView实现svg格式图片旋转。.hpjavascript

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

poj 2976 分数规划二分贪心(部分对总体的贡献度) poj 3111

poj 2976: 题意: 在n场考试中,每场考试共有b题,答对的题目有a题。 允许去掉k场考试,求能达到的最高正确率是多少。 解析: 假设已知准确率为x,则每场考试对于准确率的贡献值为: a - b * x,将贡献值大的排序排在前面舍弃掉后k个。 然后二分x就行了。 代码: #include <iostream>#include <cstdio>#incl

【QT】基础入门学习

文章目录 浅析Qt应用程序的主函数使用qDebug()函数常用快捷键Qt 编码风格信号槽连接模型实现方案 信号和槽的工作机制Qt对象树机制 浅析Qt应用程序的主函数 #include "mywindow.h"#include <QApplication>// 程序的入口int main(int argc, char *argv[]){// argc是命令行参数个数,argv是

Python QT实现A-star寻路算法

目录 1、界面使用方法 2、注意事项 3、补充说明 用Qt5搭建一个图形化测试寻路算法的测试环境。 1、界面使用方法 设定起点: 鼠标左键双击,设定红色的起点。左键双击设定起点,用红色标记。 设定终点: 鼠标右键双击,设定蓝色的终点。右键双击设定终点,用蓝色标记。 设置障碍点: 鼠标左键或者右键按着不放,拖动可以设置黑色的障碍点。按住左键或右键并拖动,设置一系列黑色障碍点