如何在 Qt 中获取 QGraphicsView 的当前可见部分?
How to get current visible portion of QGraphicsView in Qt?
我有 QGraphicsView,它有多个 QGraphicsItem。在此视图中,我正在使用放大、缩小、适合等功能应用一些转换
因此,在对当前视图应用 fit-in
功能之前,我想将视图的当前转换(视图的当前情况)存储在一个变量中。然后我想应用 Fit-in
功能。 (这样,在 Undo-Redo 中我可以使用那个存储的位置)
但我不知道如何将当前视图位置存储在变量中。我试过这种方式:
void myClass::FitIn()
{
QTransform t = _view->transform();
QScrollBar* hrSBar = _view->horizontalScrollBar();
QScrollBar* verSBar = _view->verticalScrollBar();
myCommand* c = new myCommand(t,hrSBar,verSBar);
undoStack->push(c);
_view->resetTransform();
}
如何在另一个变量中存储当前视图?
***** 编辑 ******
myCommand.cpp
myCommand::myCommand(QTransform t, QScrollBar *hr, QScrollBar *vr)
{
this->trans = t;
this->horizontalSBar = hr;
this->verticalSBar = vr;
}
void myCommand::undo()
{
_mView->setTransform(trans);
_mView->horizontalScrollBar()->setValue(horizontalSBar->maximum());
_mView->verticalScrollBar()->setValue(verticalSBar->maximum());
}
void myCommand::redo()
{
_mView->setTransform(trans); // Segmentation Fault occurs
_mView->horizontalScrollBar()->setValue(horizontalSBar->maximum());
_mView->verticalScrollBar()->setValue(verticalSBar->maximum());
}
myCommand.h
class myCommand: public QUndoCommand
{
public:
myCommand(QTransform t, QScrollBar* hr, QScrollBar* vr);
private:
QGraphicsScene* _mScene;
QGraphicsView* _mView;
}
正如 mapToScene
的源代码所揭示的,三个参数定义了在视口上可见的场景部分:
QGraphicsView::transform()
QAbstractScrollArea::horizontalScrollBar()->value()
QAbstractScrollArea::verticalScrollBar()->value()
要实现 undo-redo 框架,这三个参数应在每个操作之前存储并在撤消时恢复。
我有 QGraphicsView,它有多个 QGraphicsItem。在此视图中,我正在使用放大、缩小、适合等功能应用一些转换
因此,在对当前视图应用 fit-in
功能之前,我想将视图的当前转换(视图的当前情况)存储在一个变量中。然后我想应用 Fit-in
功能。 (这样,在 Undo-Redo 中我可以使用那个存储的位置)
但我不知道如何将当前视图位置存储在变量中。我试过这种方式:
void myClass::FitIn()
{
QTransform t = _view->transform();
QScrollBar* hrSBar = _view->horizontalScrollBar();
QScrollBar* verSBar = _view->verticalScrollBar();
myCommand* c = new myCommand(t,hrSBar,verSBar);
undoStack->push(c);
_view->resetTransform();
}
如何在另一个变量中存储当前视图?
***** 编辑 ******
myCommand.cpp
myCommand::myCommand(QTransform t, QScrollBar *hr, QScrollBar *vr)
{
this->trans = t;
this->horizontalSBar = hr;
this->verticalSBar = vr;
}
void myCommand::undo()
{
_mView->setTransform(trans);
_mView->horizontalScrollBar()->setValue(horizontalSBar->maximum());
_mView->verticalScrollBar()->setValue(verticalSBar->maximum());
}
void myCommand::redo()
{
_mView->setTransform(trans); // Segmentation Fault occurs
_mView->horizontalScrollBar()->setValue(horizontalSBar->maximum());
_mView->verticalScrollBar()->setValue(verticalSBar->maximum());
}
myCommand.h
class myCommand: public QUndoCommand
{
public:
myCommand(QTransform t, QScrollBar* hr, QScrollBar* vr);
private:
QGraphicsScene* _mScene;
QGraphicsView* _mView;
}
正如 mapToScene
的源代码所揭示的,三个参数定义了在视口上可见的场景部分:
QGraphicsView::transform()
QAbstractScrollArea::horizontalScrollBar()->value()
QAbstractScrollArea::verticalScrollBar()->value()
要实现 undo-redo 框架,这三个参数应在每个操作之前存储并在撤消时恢复。