下面是一个简单的QScrollArea的效果:
下面为上面gif动画的实现:
//图片为300*300.把图片放到label中.
QImage image("./1.png");
QLabel *label = new QLabel(this);
label->resize(300,300);
label->setPixmap(QPixmap::fromImage(image));
//创建滚动区域。
QScrollArea *scrollArea = new QScrollArea;
//把label控件放进滚动区域中.注意只能设置一个控件,一个一个控件往里面加,只会显示最后一个加入的控件.
scrollArea->setWidget(label);
//设置对齐格式.
scrollArea->setAlignment(Qt::AlignCenter);
//设置水平和垂直滚动条的策略.默认是如下策略.
//scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
//scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
//设置是否自动调整部件的大小.默认是false.
//scrollArea->setWidgetResizable(false);
QHBoxLayout *layout = new QHBoxLayout(this);
layout->addWidget(scrollArea);
this->resize(200,200);
下面是三种滚动条的策略.
Qt::ScrollBarAsNeeded 0 滚动条根据需要打开或关闭.默认的策略.根据滚动区域内控件的实际大小和滚动区域的大小比较.
Qt::ScrollBarAlwaysOff 1 滚动条始终处于关闭状态.
Qt::ScrollBarAlwaysOn 2 滚动条始终处于打开状态.
关于无法出现滚动条的原因:
1.滚动策略的设置.
2.是否设置scrollArea->setWidgetResizable(false);如果代码创建的话,默认是false的.
3.如果直接从ui设计师里拖拽出来的滚动区域的话,setWidgetResizable()这个属性默认是true的.这和代码生成不太一样…看下图,未经过修改,默认是true.