图形 View 中的滚动条存在以下问题。我的应用程序获取一个 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);
在应用程序中,每次 PDF 文件更改时, View
都会更新。现在的问题是 PDF 文件中的东西也可以改变大小并且滚动条变得困惑。我希望更新后的滚动条位于某个位置,这样我就能看到与更新前相同的 PDF 文件部分。
你能给我一些关于如何完成这个的建议吗?我已经搜索过这个问题,但到目前为止我的案例没有任何效果(我也可能做错了什么)。
感谢您的回答!
最佳答案
在更改 View 内容之前,请记住使用 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);
这里的pixmap_item
是scene->addPixmap(pixmap)
的存储结果。它有 QGraphicsPixmapItem*
类型。
关于C++ Qt QGraphicsView : Remembering the position of scrollbars after reload,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17388650/