C++ Qt QGraphicsView : Remembering the position of scrollbars after reload

标签 c++ qt

图形 View 中的滚动条存在以下问题。我的应用程序获取一个 PDF 文件并(以某种方式)从中创建一个 QImageQImage 然后转换为 QPixmap,用于创建 QGraphicsScene 并从 QGraphicsScene 我创建了一个QGraphicsViewQGraphicsView 被添加到中央小部件并显示。

代码大概是这样的

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->horizo​​ntalScrollBar()->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_itemscene->addPixmap(pixmap)的存储结果。它有 QGraphicsPixmapItem* 类型。

关于C++ Qt QGraphicsView : Remembering the position of scrollbars after reload,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17388650/

相关文章:

c++ - c++ 中是否有任何函数来检查特定路径中给定的文件是否为脚本(.sh)文件

c++ - 如何解决 std::function 没有 operator== 的事实?

c++ - pragma pack 一个 STL 容器

c++ - 在 C++ 中分别测量在每个线程上花费的 CPU 时间

c++ - shared_ptr 的 vector ,从函数返回并修改它

c++ - 如何从 QMetaObject::invokeMethod 获取返回值

qt - QDate - 错误的年份

qt - 使用 QML Media Player 获取慢动作视频

c++ - Qt 和 C++ QtPlugin - 可以处理什么样的插件?

c++ - 从麦克风到整数数组的音频采样(C++/Qt)