我在图形 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/