我有以下问题: 我有QScrollArea,里面有很多QToolBut的QVBoxLayout。 QToolButtons是通过工作动态创建的,它们按如下方式添加:
QToolButton* btn = new QToolButton(ui.previewList);
btn->setCheckable(TRUE);
ui.buttonsLayout->removeItem(ui.buttonsSpacer);
ui.buttonsLayout->addWidget(btn);
ui.buttonsLayout->addItem(ui.buttonsSpacer);
有时我需要从我的程序中滚动QScrollArea以确保某些按钮的可见性,或者在添加按钮时,可以看到最后一个按钮,并且我遇到了问题。
当我尝试滚动到最后,那么上面的所有变体都会导致滚动,所以只是最后一个按钮(我需要看到它)就在屏幕外面,虽然我检查了调试,我首先添加按钮并调用主窗体的更新,然后我用滚动输入功能。也许我应该做些什么来强制QScrollArea重新计算其内容和滚动条限制?
QVerticalScrollBar scrlbar = ui.previewList->verticalScrollBar();
int max = scrlbar->maximum();
//Variant 1
scrlbar->setValue(max);
scrlbar->triggerAction(QAbstractSlider::SliderMove);
//Variant 2
scrlbar->setValue(max + ui.previewList->verticalScrollBar()->pageStep());
scrlbar->triggerAction(QAbstractSlider::SliderMove);
//Variant 3
scrlbar->triggerAction(QAbstractSlider::SliderToMaximum);
那么在这种情况下处理QScrollArea的正确方法是什么?
答案 0 :(得分:0)
确定。以下是这个问题的答案。
使ensureItemVisible工作我只需要将layoutSizeConstraint设置为SetMinAndMaxSize(是的,它是用qt文档编写的,所以我可以对自己说rtfm。)
为了滚动到最大值,需要QApplication :: processEvents(),感谢@SteakOverflow了解这一点。