例子:在窗体上显示一张大图片,然后使用滚动条来调节。
在窗体上添加控件 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 这个函数。
链接: https://www.bilibili.com/video/BV1Gh411h7Nb/?spm_id_from=333.880.my_history.page.click&vd_source=b91967c499b23106586d7aa35af46413
做个联动,
拖个控件
调整下范围,调大一些。
使用下图信号(选参数为 int 合适)
void Widget::on_spinBox_valueChanged(const QString &arg1)
{
ui->scrollArea->ensureVisible(arg1.toInt(), 100);//直接选int类型,不用转
}
运行效果如下,
大约在260左右开始移动,应该是加了 xmargin = 50 之后得到的结果。
这两个函数不好理解。不太好用。