Q滚动条滚动到中心

问题描述 投票:0回答:3

我想将我的

QScrollbar
滚动到中心;我以为这很容易,但是

QScrollBar *bar = ui->scrollArea->horizontalScrollBar();
bar->setValue(bar->maximum()/2);
bar->update();
ui->scrollArea->update();

不做这项工作。出了什么问题?

c++ qt qtgui
3个回答
2
投票

在 Qt 的文档中,实际文档长度由

定义

文档长度=最大() - 最小() + pageStep() (参见QScrollBar类参考)

所以尝试更换

int center = (min+max)/2;

int center = (max+min+bar->pagestep())/2;

0
投票

A

QScrollBar
也有最小值。因此,要将滚动条居中:

int max = bar->maximum();
int min = bar->minimum();
int center = (  min + max ) / 2;
bar->setValue( center );

0
投票

我遇到了同样的问题,并注意到显示小部件时最大/最小值的值发生了变化。我的小部件的构造函数中的最大值/最小值不同。

看起来 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);
}

根据您想要实现的目标,您可以重载另一个小部件的显示槽。

© www.soinside.com 2019 - 2024. All rights reserved.