QT控件 — QScrollArea

时间:2025-01-23 16:52:28

例子:在窗体上显示一张大图片,然后使用滚动条来调节。

在窗体上添加控件 Scroll Area,如下图所示
在这里插入图片描述
需要说明的是,控件 Scroll Area 也相当于是一个容器。

后面主要说一下这个属性
在这里插入图片描述
在窗体上在放一个Label作为图片的容器。之后点击加载所要展示的大图片。
在这里插入图片描述
将label控件拖进scrollArea这个容器中,点击运行,会发现,并没有效果。
在这里插入图片描述
这是因为布局的原因。
在这里插入图片描述
将其布置为水平布局,
在这里插入图片描述
会发现
在这里插入图片描述
运行代码,也是这样。
除了上面所说的打破布局和拖动Label到scrollArea内之外,还可以直接使用代码

ui->scrollArea->setWidget(ui->label);

运行结果也是一样。

下面,再来说下上面提到的属性。

它是可以自动调节它内部控件的对齐方式,对于大于它的控件或图片,可能没有效果。这里使用代码来实现,试下。

ui->scrollArea->setWidget(ui->pushButton);

在没勾选时,
在这里插入图片描述
勾选时,
在这里插入图片描述
在这里插入图片描述
其他对齐方式也可以尝试下。

下面再介绍函数 ensureVisible 和 ensureWidgetVisible

首先,是 ensureWidgetVisible 这个函数,添加个按键,转到槽函数,试下。

void Widget::on_pushButton_clicked()
{
    ui->scrollArea->ensureWidgetVisible(ui->label);
}

需要注意,需要将该属性
在这里插入图片描述
勾选。运行效果如下,
请添加图片描述
看下 ensureWidgetVisible 这个函数的介绍。
在这里插入图片描述
滚动区域的内容,这样 QScrollArea::widget() 的 childWidget 就可以在视口内看到,通过 xmargin 和 ymargin 以像素为单位指定边缘。如果指定的点如果无法到达指定的点,则将内容滚动到最近的有效位置。两个边距的默认值都是50像素。

(没什么效果,不太明白这个函数什么意思)

转而去看 ensureVisible 这个函数。

链接: /video/BV1Gh411h7Nb/?spm_id_from=333.880.my_history.&vd_source=b91967c499b23106586d7aa35af46413

做个联动,

拖个控件
在这里插入图片描述
在这里插入图片描述
调整下范围,调大一些。
在这里插入图片描述
在这里插入图片描述
使用下图信号(选参数为 int 合适)
在这里插入图片描述

void Widget::on_spinBox_valueChanged(const QString &arg1)
{
    ui->scrollArea->ensureVisible(arg1.toInt(), 100);//直接选int类型,不用转
}

运行效果如下,
在这里插入图片描述
大约在260左右开始移动,应该是加了 xmargin = 50 之后得到的结果。
在这里插入图片描述

这两个函数不好理解。不太好用。