Qt之QScrollArea

简述

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来接收。

时间: 2024-09-23 23:41:49

Qt之QScrollArea的相关文章

《Qt 实战一二三》

简介 "我们来自Qt分享&&交流,我们来自Qt Quick分享&&交流",不管你是笑了,还是笑了,反正我们是认真的.我们就是要找寻一种Hold不住的状态,来开始每一天的点滴分享,我们是一个有激情,有态度的部队. 但是我们还是我们,我们只是多了一份责任.古语有云:"不积跬步无以至千里,不积小流无以成江海",所以每一个伟大事务的产生都不是一蹴而就的.现在我们要立足眼下,把第一站放在地球,"<Qt 实战一二三>&quo

Qt QScrollArea and layout in code

Qt QScrollArea and layout in code 一.参考文档: 1. Qt 第六章 QScrollArea类给QWidget添加滚动条 http://blog.csdn.net/commshare/article/details/6753978 2. 24小时学会QT编程──窗口的缩放和滚动条的使用 http://blog.163.com/vic_kk/blog/static/4947052420083308325238/ 3. QWidget::setLayout: Att

[Qt Topic] – 二维绘图研习,做一个简单批量水印工具

[Qt Topic] – 二维绘图研习,做一个简单批量水印工具 作者:Jason Lee 日期:2010-05-02 平台:Qt SDK v2010.02.1 + Windows Xp 声明:文章作者仅在Intel软件网络和CSDN博客发表本文,如有转载,请注明出处   [1]二维绘图概览 Qt中的二维绘图是基于QPainter.QPaintEngine和QPaintDevice机制的:以QPaintEngine作为中间接口,使用QPainter在不同绘图设备上进行绘图操作,而QPaintDev

Qt之QSS(白色靓丽)

简述 Qt助手中有关于各种部件的QSS详细讲解,资源很丰富,请参考:Qt Style Sheets Examples. 白色靓丽 - 一款漂亮的QSS风格. 你可以直接使用,也可以随意转载,但请务必保留版权声明和许可声明,请参考"声明"部分. 简述 声明 效果 QSS 更多参考 声明 被授权人权利 被授权人有权利使用.复制.修改.合并.出版发行.散布.再授权及贩售软件及软件的副本. 被授权人可根据程序的需要修改授权条款为适当的内容. 被授权人义务 在软件和软件的所有副本中都必须包含版权

Qt之QSS(黑色炫酷)

简述 Qt助手中有关于各种部件的QSS详细讲解,资源很丰富,请参考:Qt Style Sheets Examples. 黑色炫酷 - 一款漂亮的QSS风格. 之前博客中分享了很多关于Qt的样式效果,几乎都是基下面此样式. 你可以直接使用,也可以随意转载,但请务必保留版权声明和许可声明,请参考"声明"部分. 简述 声明 效果 QSS 更多参考 声明 被授权人权利 被授权人有权利使用.复制.修改.合并.出版发行.散布.再授权及贩售软件及软件的副本. 被授权人可根据程序的需要修改授权条款为适

QT中的QInputDialog的小例子

其实这断代码没什么优秀之处,贴出来主要为为了方便自己和他人,因为以后如果用到这一块的话,这些代码可能能够直接拿过来用. InpugDialog.h头文件: #ifndef INPUGDIALOG_H #define INPUGDIALOG_H #include <QtGui> #include "ui_inpugdialog.h" class InpugDialog : public QDialog { Q_OBJECT public: InpugDialog(QWidge

vs2008-VS搭配QT,x64平台下为挖三维编的dll,怎么调试

问题描述 VS搭配QT,x64平台下为挖三维编的dll,怎么调试 VS搭配QT,x64平台下为挖三维编的dll,怎么调试?新手,试过用挖三维打开调试,但是没看到界面在哪里,请懂得QT的前辈回答,谢谢! 解决方案 https://github.com/Vaa3D/Vaa3D_Wiki/wiki/Build-Vaa3D-on-Linux

qt如何实现 滑动屏幕的效果

问题描述 qt如何实现 滑动屏幕的效果 用了qtscrollArea做了只能靠移动滑动条来实现滑动的效果,怎么样才能做到用触摸屏实现滑动效果,而不是靠滑动条.求大神指点. 解决方案 不要依赖于 qtscrollArea,自己做滑动效果,这样就可以不依靠滑动条.

[Qt教程] 第19篇 2D绘图(九)图形视图框架(上)

[Qt教程] 第19篇 2D绘图(九)图形视图框架(上) 楼主  发表于 2013-5-4 15:26:20 | 查看: 1798| 回复: 26 图形视图框架(上) 版权声明 导语 在前面讲的基本绘图中,我们可以自己绘制各种图形,并且控制它们.但是,如果需要同时绘制很多个相同或不同的图形,并且要控制它们的移动,检测它们的碰撞和叠加:或者我们想让自己绘制的图形可以拖动位置,进行缩放和旋转等操作.实现这些功能,要是还使用以前的方法,那么会十分困难.解决这些问题,可以使用Qt提供的图形视图框架.