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使用QSqlDatabase连接MySQL实现增删改查功能

《Qt使用QSqlDatabase连接MySQL实现增删改查功能》这篇文章主要为大家详细介绍了Qt如何使用QSqlDatabase连接MySQL实现增删改查功能,文中的示例代码讲解详细,感兴趣的小伙伴... 目录一、创建数据表二、连接mysql数据库三、封装成一个完整的轻量级 ORM 风格类3.1 表结构

Qt QCustomPlot库简介(最新推荐)

《QtQCustomPlot库简介(最新推荐)》QCustomPlot是一款基于Qt的高性能C++绘图库,专为二维数据可视化设计,它具有轻量级、实时处理百万级数据和多图层支持等特点,适用于科学计算、... 目录核心特性概览核心组件解析1.绘图核心 (QCustomPlot类)2.数据容器 (QCPDataC

Qt如何实现文本编辑器光标高亮技术

《Qt如何实现文本编辑器光标高亮技术》这篇文章主要为大家详细介绍了Qt如何实现文本编辑器光标高亮技术,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录实现代码函数作用概述代码详解 + 注释使用 QTextEdit 的高亮技术(重点)总结用到的关键技术点应用场景举例示例优化建议

Qt 设置软件版本信息的实现

《Qt设置软件版本信息的实现》本文介绍了Qt项目中设置版本信息的三种常用方法,包括.pro文件和version.rc配置、CMakeLists.txt与version.h.in结合,具有一定的参考... 目录在运行程序期间设置版本信息可以参考VS在 QT 中设置软件版本信息的几种方法方法一:通过 .pro

html 滚动条滚动过快会留下边框线的解决方案

《html滚动条滚动过快会留下边框线的解决方案》:本文主要介绍了html滚动条滚动过快会留下边框线的解决方案,解决方法很简单,详细内容请阅读本文,希望能对你有所帮助... 滚动条滚动过快时,会留下边框线但其实大部分时候是这样的,没有多出边框线的滚动条滚动过快时留下边框线的问题通常与滚动条样式和滚动行

VS配置好Qt环境之后但无法打开ui界面的问题解决

《VS配置好Qt环境之后但无法打开ui界面的问题解决》本文主要介绍了VS配置好Qt环境之后但无法打开ui界面的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目UKeLvb录找到Qt安装目录中designer.UKeLvBexe的路径找到vs中的解决方案资源

Qt之QMessageBox的具体使用

《Qt之QMessageBox的具体使用》本文介绍Qt中QMessageBox类的使用,用于弹出提示、警告、错误等模态对话框,具有一定的参考价值,感兴趣的可以了解一下... 目录1.引言2.简单介绍3.常见函数4.按钮类型(QMessage::StandardButton)5.分步骤实现弹窗6.总结1.引言

Qt中Qfile类的使用

《Qt中Qfile类的使用》很多应用程序都具备操作文件的能力,包括对文件进行写入和读取,创建和删除文件,本文主要介绍了Qt中Qfile类的使用,具有一定的参考价值,感兴趣的可以了解一下... 目录1.引言2.QFile文件操作3.演示示例3.1实验一3.2实验二【演示 QFile 读写二进制文件的过程】4.

uniapp小程序中实现无缝衔接滚动效果代码示例

《uniapp小程序中实现无缝衔接滚动效果代码示例》:本文主要介绍uniapp小程序中实现无缝衔接滚动效果的相关资料,该方法可以实现滚动内容中字的不同的颜色更改,并且可以根据需要进行艺术化更改和自... 组件滚动通知只能实现简单的滚动效果,不能实现滚动内容中的字进行不同颜色的更改,下面实现一个无缝衔接的滚动

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义