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

相关文章

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 自定义

C++如何通过Qt反射机制实现数据类序列化

《C++如何通过Qt反射机制实现数据类序列化》在C++工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作,所以本文就来聊聊C++如何通过Qt反射机制实现数据类序列化吧... 目录设计预期设计思路代码实现使用方法在 C++ 工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作。由于数据类

Qt中QGroupBox控件的实现

《Qt中QGroupBox控件的实现》QGroupBox是Qt框架中一个非常有用的控件,它主要用于组织和管理一组相关的控件,本文主要介绍了Qt中QGroupBox控件的实现,具有一定的参考价值,感兴趣... 目录引言一、基本属性二、常用方法2.1 构造函数 2.2 设置标题2.3 设置复选框模式2.4 是否

QT进行CSV文件初始化与读写操作

《QT进行CSV文件初始化与读写操作》这篇文章主要为大家详细介绍了在QT环境中如何进行CSV文件的初始化、写入和读取操作,本文为大家整理了相关的操作的多种方法,希望对大家有所帮助... 目录前言一、CSV文件初始化二、CSV写入三、CSV读取四、QT 逐行读取csv文件五、Qt如何将数据保存成CSV文件前言

一文详解如何在Python中从字符串中提取部分内容

《一文详解如何在Python中从字符串中提取部分内容》:本文主要介绍如何在Python中从字符串中提取部分内容的相关资料,包括使用正则表达式、Pyparsing库、AST(抽象语法树)、字符串操作... 目录前言解决方案方法一:使用正则表达式方法二:使用 Pyparsing方法三:使用 AST方法四:使用字