繁体   English   中英

如何获取Qt中QGraphicsView的当前可见部分?

[英]How to get current visible portion of QGraphicsView in Qt?

我有 QGraphicsView,它有多个 QGraphicsItem。 在此视图中,我正在使用放大、缩小、适合等功能应用一些转换。
因此, fit-in功能之前,我想将视图的当前转换(视图的当前情况)存储在一个变量中。 然后我想应用Fit-in功能。 (这样,在 Undo-Redo 中我可以使用那个存储的位置)
但我不知道如何将视图的当前 position 存储在变量中。 我试过这种方式:

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

正如mapToScene的源代码所揭示的,三个参数定义了在视口上可见的场景部分:

要实现撤消-重做框架,这三个参数应该在每次操作之前存储,并在撤消时恢复。

暂无
暂无

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

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