C++ Qt QGraphicsView:重新加载后记住滚动条的位置

piz*_*zet 6 c++ qt

我在图形视图中的滚动条有以下问题.我的应用程序采用PDF文件并以某种方式创建一个QImage.将QImage然后被转换成QPixmap,其被用于创建QGraphicsScene并从QGraphicsScene我创建QGraphicsView.它QGraphicsView被添加到中央窗口小部件并显示.

代码看起来大致如此

QImage image;
image = loadImage(path);

QPixmap pixmap;
pixmap.convertFromImage(image);

scene = new QGraphicsScene(this);
scene->addPixmap(pixmap);

view = new QGraphicsView(scene);

textEdit = new QTextEdit(this)
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(view);
layout->addWidget(textEdit);
QWidget *widget = new QWidget;
widget->setLayout(layout);
setCentralWidget(widget);
Run Code Online (Sandbox Code Playgroud)

在应用程序中,view每次PDF文件更改时都会更新.现在的问题是,PDF文件中的东西也会改变大小,滚动条会搞乱.我希望更新后的滚动条位于某个位置,这样我将看到与更新前看到的PDF文件相同的部分.

你能就如何做到这一点给我一些建议吗?我已经搜索过这个问题,但到目前为止我的案例中没有任何工作(我本可以做错事).

谢谢您的回答!

Pav*_*hov 4

在更改视图内容之前,请使用view->horizontalScrollBar()->value()和记住滚动条位置view->verticalScrollBar()->value()

更改后使用 重置以前的值setValue(int)

遗憾的是您没有提供任何尝试用来完成此操作的代码,因此我无法告诉您您做错了什么。

这是一个例子:

int pos_x = view->horizontalScrollBar()->value();
int pos_y = view->verticalScrollBar()->value();
pixmap_item->setPixmap(QPixmap::fromImage(new_image));
view->horizontalScrollBar()->setValue(pos_x);
view->verticalScrollBar()->setValue(pos_y);
Run Code Online (Sandbox Code Playgroud)

pixmap_item是 的存储结果scene->addPixmap(pixmap)。它有QGraphicsPixmapItem*类型。