核心代码:
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的位置,并使 控件尽可能显示在屏幕中间。
这段代码主要实现了一个功能,即遍历插件部件的QLabel子组件,找到特定文本的标签,并根据其位置调整滚动区域的垂直滚动条,使得该标签尽可能显示在屏幕中间。当插件实例名称为'Theme'时,进行特殊处理,将位置设为原来的一半。通过这种方式,确保了用户关注的内容始终在可视区域的中央。
845

被折叠的 条评论
为什么被折叠?



