Qt之QScrollArea

简介: 简述QScrollArea提供了一个滚动视图到另一个部件。滚动区域用于显示一个画面中的子部件的内容。如果部件超过画面的大小,视图可以提供滚动条,这样就都可以看到部件的整个区域。简述基本使用对齐方式调整部件大小手动调整自动调整获取与移除部件获取移除基本使用子部件必须使用setWidget()指定,例如:QLab

简述

QScrollArea提供了一个滚动视图到另一个部件。

滚动区域用于显示一个画面中的子部件的内容。如果部件超过画面的大小,视图可以提供滚动条,这样就都可以看到部件的整个区域。

基本使用

子部件必须使用setWidget()指定,例如:

QLabel *imageLabel = new QLabel(this);
imageLabel->setPixmap(QPixmap(":/Images/head"));

QScrollArea *scrollArea = new QScrollArea(this);
scrollArea->setBackgroundRole(QPalette::Dark);  // 背景色
scrollArea->setWidget(imageLabel);

上面的代码创建了一个滚动区域(如下所示)包含一个图像。当缩放图片时,滚动区域可以提供必要的滚动条:

这里写图片描述

可以使用widget()函数来获取部件,视图可以使用setWidgetResizable()函数来调整大小。

有两个便利的函数:ensureVisible()和ensureWidgetVisible(),确保视口中的一定区域内容是可见的,必要时通过滚动内容。

对齐方式

默认的对齐方式为:水平居左,垂直居上。可以通过setAlignment(Qt::Alignment)来改变。

这里写图片描述

QLabel *imageLabel = new QLabel(this);
QPixmap pixmap(":/Images/head");
pixmap = pixmap.scaled(200, 200);
imageLabel->setPixmap(pixmap);
imageLabel->setStyleSheet("background: white;");  // 用于“部件调整大小”处效果对比

QScrollArea *scrollArea = new QScrollArea(this);
scrollArea->setBackgroundRole(QPalette::Dark);  // 背景色
scrollArea->setWidget(imageLabel);
scrollArea->setAlignment(Qt::AlignCenter);  // 居中对齐

Qt::Alignment有很多可选项,分别表示水平和垂直方向的对齐方式,例如:左上右下。

调整部件大小

上面,通过setStyleSheet()为QLabel部件设置了白色背景色,但是,我们并没有发现背景有任何变化。

因为默认情况下属性widgetResizable为false。滚动区域会保持部件的大小,也就是说QLabel自适应QPixmap的大小。

如果要调整部件大小,有两种可选方式。

手动调整

这里写图片描述

忽略这个属性,我们可以通过使用widget()->resize()来调整部件的大小,这时滚动区域会自动调整自身大小为新的尺寸。

QLabel *imageLabel = new QLabel(this);
QPixmap pixmap(":/Images/head");
pixmap = pixmap.scaled(200, 200, Qt::KeepAspectRatio);  // 图片缩放
imageLabel->setPixmap(pixmap);
imageLabel->setStyleSheet("background: white;");  // 标签白色背景
imageLabel->setAlignment(Qt::AlignCenter);  // 图片居中

QScrollArea *scrollArea = new QScrollArea(this);
scrollArea->setBackgroundRole(QPalette::Dark);  // 背景色
scrollArea->setWidget(imageLabel);
scrollArea->setAlignment(Qt::AlignCenter);  // 居中对齐
scrollArea->widget()->resize(260, 260);  // 手动调整大小

自动调整

如果widgetResizable被设置为true,则滚动区域部件将自动调整,以避免可以不显示的滚动条,或者利用额外的空间。

这里写图片描述

QLabel *imageLabel = new QLabel(this);
QPixmap pixmap(":/Images/head");
pixmap = pixmap.scaled(200, 200, Qt::KeepAspectRatio);  // 图片缩放
imageLabel->setPixmap(pixmap);
imageLabel->setStyleSheet("background: white;");  // 标签白色背景
imageLabel->setAlignment(Qt::AlignCenter);  // 图片居中

QScrollArea *scrollArea = new QScrollArea(this);
scrollArea->setBackgroundRole(QPalette::Dark);  // 背景色
scrollArea->setWidget(imageLabel);
scrollArea->setAlignment(Qt::AlignCenter);  // 居中对齐
scrollArea->setWidgetResizable(true);  // 自动调整大小

获取与移除部件

获取

可以通过widget()函数来获取滚动区域的部件,如果没有,则返回0。

QWidget *widget = scrollArea->widget();
QLabel *pLabel = qobject_cast<QLabel *>(widget);

如果部件是一个QWidget的子类,可以用qobject_cast进行类型转换。

移除

如果要将部件从滚动区域中移除(即:在上例中,滚动区域不再显示图片),使用takeWidget()函数。

QWidget *widget = scrollArea->takeWidget();
QLabel *pLabel = qobject_cast<QLabel *>(widget);

移除的同时,会将部件的所有权传递到调用者,可以用QWidget来接收。

目录
相关文章
|
存储 Cloud Native 前端开发
Qt QScrollArea使用
Qt QScrollArea使用
Qt QScrollArea and layout in code
Qt QScrollArea and layout in code 一、参考文档: 1. Qt 第六章 QScrollArea类给QWidget添加滚动条 http://blog.
1137 0
|
5月前
|
数据安全/隐私保护 C++ 计算机视觉
Qt(C++)开发一款图片防盗用水印制作小工具
文本水印是一种常用的防盗用手段,可以将文本信息嵌入到图片、视频等文件中,用于识别和证明文件的版权归属。在数字化和网络化的时代,大量的原创作品容易被不法分子盗用或侵犯版权,因此加入文本水印成为了保护原创作品和维护知识产权的必要手段。 通常情况下,文本水印可以包含版权声明、制作者姓名、日期、网址等信息,以帮助识别文件的来源和版权归属。同时,为了增强防盗用效果,文本水印通常会采用字体、颜色、角度等多种组合方式,使得水印难以被删除或篡改,有效地降低了盗用意愿和风险。 开发人员可以使用图像处理技术和编程语言实现文本水印的功能,例如使用Qt的QPainter类进行文本绘制操作,将文本信息嵌入到图片中,
199 1
Qt(C++)开发一款图片防盗用水印制作小工具
|
4月前
|
监控 C++ 容器
【qt】MDI多文档界面开发
【qt】MDI多文档界面开发
112 0
|
3月前
|
开发工具 C++
qt开发技巧与三个问题点
本文介绍了三个Qt开发中的常见问题及其解决方法,并提供了一些实用的开发技巧。
|
3月前
|
4月前
|
C++
C++ Qt开发:QUdpSocket网络通信组件
QUdpSocket是Qt网络编程中一个非常有用的组件,它提供了在UDP协议下进行数据发送和接收的能力。通过简单的方法和信号,可以轻松实现基于UDP的网络通信。不过,需要注意的是,UDP协议本身不保证数据的可靠传输,因此在使用QUdpSocket时,可能需要在应用层实现一些机制来保证数据的完整性和顺序,或者选择在适用的场景下使用UDP协议。
204 2
Qt开发网络嗅探器02
Qt开发网络嗅探器02
|
4月前
|
存储 运维 监控
Qt开发网络嗅探器01
Qt开发网络嗅探器01
|
4月前
|
网络协议 容器
Qt开发网络嗅探器03
Qt开发网络嗅探器03