我想将我的
QScrollbar
滚动到中心;我以为这很容易,但是
QScrollBar *bar = ui->scrollArea->horizontalScrollBar();
bar->setValue(bar->maximum()/2);
bar->update();
ui->scrollArea->update();
不做这项工作。出了什么问题?
在 Qt 的文档中,实际文档长度由
定义文档长度=最大() - 最小() + pageStep() (参见QScrollBar类参考)
所以尝试更换
int center = (min+max)/2;
与
int center = (max+min+bar->pagestep())/2;
A
QScrollBar
也有最小值。因此,要将滚动条居中:
int max = bar->maximum();
int min = bar->minimum();
int center = ( min + max ) / 2;
bar->setValue( center );
我遇到了同样的问题,并注意到显示小部件时最大/最小值的值发生了变化。我的小部件的构造函数中的最大值/最小值不同。
看起来 Qt 在显示小部件时对其进行布局。 我重载了小部件的显示槽并将光标设置在那里,我将其保存为构造函数中的成员。
//header of widget
...
void showEvent(QShowEvent *event) override;
...
// cpp of widget (in my case LiveTab)
void LiveTab::showEvent(QShowEvent *event)
{
std::cout << "show called" << std::endl;
int max = hScrollBar->maximum();
int min = hScrollBar->minimum();
this->hScrollBar->setValue((max - min) / 2);
max = vScrollBar->maximum();
min = vScrollBar->minimum();
this->vScrollBar->setValue((max - min) / 2);
}
根据您想要实现的目标,您可以重载另一个小部件的显示槽。