我有 QGraphicsView,它有多個 QGraphicsItem。在這個視圖中,我正在使用放大、縮小、適合 -In 等功能應用一些轉換。
因此,在對當前視圖應用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());
}
我的命令.h
class myCommand: public QUndoCommand
{
public:
myCommand(QTransform t, QScrollBar* hr, QScrollBar* vr);
private:
QGraphicsScene* _mScene;
QGraphicsView* _mView;
}
uj5u.com熱心網友回復:
正如 的源代碼所揭示的mapToScene,三個引數定義了在視口上可見的場景部分:
QGraphicsView::transform()QAbstractScrollArea::horizontalScrollBar()->value()QAbstractScrollArea::verticalScrollBar()->value()
為了實作一個撤消-重做框架,這三個引數應該在每次撤消操作之前存盤。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/451442.html
標籤:C qt qt5 qgraphicsview qgraphics场景
