繁体   English   中英

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

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

我在图形视图中的滚动条有以下问题。 我的应用程序获取一个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->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_itempixmap_item scene->addPixmap(pixmap)的存储结果。 它具有QGraphicsPixmapItem*类型。

我更改了代码,但行为异常。

QImage image;
image = loadImage(path);

QPixmap pixmap;
pixmap.convertFromImage(image);

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

int hsbv = -1;
int vsbv = -1;

if (view != NULL) {
  hsbv = view->horizontalScrollBar()->value();
  vsbv = view->verticalScrollBar()->value();
}     

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);

view->horizontalScrollBar()->setVealue(hsbv);
view->verticalScrollBar()->setValue(vsbv);

当我最后打印出view->horizontalScrollBar()->value()时,我总是得到83,而view->verticalScrollBar()->value()得到479,这很奇怪,但是当我打印hsbvvsbv我得到合理的数字。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM