QT添加带有滚动条的窗⼝,并使之滚动起来
QT  ui designer中提供了⼀个叫做QScrollBar的控件,但这导致了⼈们的⼀个误区,就是必须要使⽤这个控件,才能使窗⼝滚动起来
虽然可以通过这个控件来达到⽬的,但是需要⾃⼰去绑定和窗⼝滚动的⼀些信号和槽函数,⾮常⿇烦。
因此,我们通常选择另⼀种⽅案来实现窗⼝滚动:QScrollArea控件。
这个控件⾃带了滚动条,我们只需要在使⽤前设置好这个控件的⼀些参数即可。
这个控件⾃带了⼀个⼦控件:QWidget:scrollAreaWidget。我们需要对这个控件的⼀些参数进⾏设置。
要想看到滚动条的⼀个必要条件就是scrollAreaWidget的尺⼨⼤于scrollArea。
这⾥我们可以看到,两个控件尺⼨都相同,此时运⾏程序,是不会看到右边有垂直滚动条的
我们修改scrollAreaWidget的尺⼨⾼度为1000
再次运⾏程序
结果还是没有垂直滚动条,这是什么原因呢?
因为QScrollArea在Qt designer中有⼀个属性:WidgetResizable。它的默认属性为true(勾选),false(未勾选)
我们需要取消这个钩,将其属性设置为false,之后再次运⾏程序
这是就可以看到右边出现了滚动条,此时出现的滚动条已经可以通过⿏标滚轮,⿏标左键拖拽,点击来控制显⽰区域了,都不需要⾃⼰去实现什么函数。
和QScrollBar相⽐,简直不要太⽅便。
但是,再界⾯上需要动态添加控件的时候,给scrollAreaWidget设置⼀个固定的尺⼨就不合适了,因为当控件的坐标超出scrollAreaWidget的尺⼨时,依然⽆法显⽰
此时,就需要在动态⽣成控件的时候添加⼀个判断,判断控件的位置+尺⼨是否超出了scrollAreaWidget的显⽰范围,如果超出,则需要使⽤函数
ui->scrollAreaWidget->setGeometry(0, 0, 340, ui->scrollAreaWidget->height()+30);
动态的设置scrollAreaWidget的尺⼨⼤⼩,这样就能保证⽆论⽣成多少动态控件,始终都在scrollAreaWidget范围内,⽽且可以通过滚动条滚动来显⽰不同区域的控件
补充使⽤代码添加滚动区域的⽅法
⾸先在界⾯上随便放置⼀个容器,我们这⾥放置了⼀个groupbox
然后在头⽂件中添加如下代码
QHBoxLayout *layout;
QScrollArea *scrollarea;
QWidget *scrollareacontent;
然后在构造函数中添加如下代码
js控制滚动条Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{
ui->setupUi(this);
scrollarea = new QScrollArea(ui->groupBox);
scrollarea->setWidgetResizable(true);
scrollarea->setGeometry(0,0,ui->groupBox->width(),ui->groupBox->height());
layout = new QHBoxLayout(ui->groupBox);
scrollareacontent = new QWidget(ui->groupBox);
scrollareacontent->setLayout(layout);
scrollarea->setWidget(scrollareacontent);
}
注意,这⾥设置的⽗对象是ui->groupbox,就是我们前⾯添加在主界⾯上的groupbox控件
然后添加按钮槽函数,实现点击⼀个按钮就在groupbox中添加⼀个新按钮的功能,准确的说,应该是在scrollareacontent中添加新的按钮void Widget::on_pushButton_clicked()
{
QPushButton *btn = new QPushButton(scrollareacontent);
btn->setMinimumSize(btn->size());
layout->addWidget(btn);
}
新建按钮的时候,它的⽗对象是scrollareacontent,如果是别的⽗对象,滚动条将不会⽣效。
之后,点击这个按钮就可以⽣成新的按钮控件,并且⾃动布局,布局⼤⼩超出scrollareacontent之后,会⾃动出现滚动条。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。