核心代码:
for (QLabel *o : pluginwidget->findChildren<QLabel*>()) {
if (o->text() == jumpText) {
QPoint pos = o->mapTo(ui->scrollArea->widget(), o->pos());
int widgetHeight = ui->scrollArea->widget()->height();
int areaHeight = ui->scrollArea->height();
if (pluginInstance->name() == "Theme") {
pos.setY(pos.y()/2);
}
int maxNum = widgetHeight - areaHeight;
int value = pos.y() + o->height() - areaHeight;
value = value + areaHeight/2; //尽量让选中的显示在中间位置
if (value <= 0) {
ui->scrollArea->verticalScrollBar()->setValue(0);
} else if (value > maxNum){
ui->scrollArea->verticalScrollBar()->setValue(maxNum);
} else {
ui->scrollArea->verticalScrollBar()->setValue(value);
}
return;
}
}
这里让滑动条滑至 控件o的位置,并使 控件尽可能显示在屏幕中间。