在QGraphicsView中设置QGraphicsScene的精确视图区域(rect) -一个更好的fitInView
Setting exact view area (rect) of QGraphicsScene in QGraphicsView - a better fitInView()?
我未能在子类QGraphicsView上恢复一个特定的视图(可见区域)。
所查看场景的可见矩形应为
mapToScene( rect() ).boundingRect()
QRectF(27.8261,26.9565 673.043x507.826)
我在QGraphicsView的析构函数中获得了这些值,它们似乎是有效的。
恢复窗口几何形状后,我在第一个QGraphicsView::resizeEvent中使用上述值(第一个事件具有无效的旧大小QSize(-1, -1)
),试图使用
fitInView( QRectF(....) , Qt::IgnoreAspectRatio);
这会在显示视图之前触发多个scrollContentsBy事件,之后触发另一个resize和scroll事件,然后主窗口showEvent触发,导致更多的resize scroll和resize事件。我确信这个序列是必要的GUI布局构建,但我现在很困惑,我如何能运行fitInView一旦一切都设置好。
在显示GUI后使用QTimer::singleShot运行该函数,我得到了大约所需的结果,但矩阵和查看的区域不同:
ui->graphicsView->matrix();
ui->graphicsView->mapToScene( ui->graphicsView->rect()).boundingRect();
:
"[m11=1 m12=0 m21=0 m22=1 dx=0 dy=0] (x=27 y=27 w=774 h=508)"
恢复:
"[m11=0.954724 m12=0 m21=0 m22=0.954724 dx=0 dy=0] (x=17.8062 y=24.0907 w=810.705 h=532.091)"
所以fitInView()不服务于我的目的很好-有另一个,可靠的方式吗?
我正在使用Qt 4.8.1与MSVC2010
另一种方法是恢复变换和窗口滚动位置,如下所示:
settings->setValue("view", mapToScene( rect() ).boundingRect() );
settings->setValue("transform", transform() );
settings->sync();
并恢复
QTransform trans = settings->value("transform", QTransform()).value<QTransform>();
QRectF view = settings->value( "view", QRectF() ).value<QRectF>();
setTransform( trans );
centerOn( view.center() );
但是这个方法也有一个偏移量
之前"[m11=4.96282 m12=0 m21=0 m22=4.96282 dx=0 dy=0] (x=29.6203 y=29.4188 w=155.96 h=104.981)"
后"[m11=4.96282 m12=0 m21=0 m22=4.96282 dx=0 dy=0] (x=54.8076 y=53.8001 w=155.96 h=104.981)"
当滚动条被隐藏时,偏移量也会出现。将代码移动到showEvent()不会影响结果。
最后是什么工作:在showEvent中,恢复转换,恢复滚动条值:
setTransform( trans );
verticalScrollBar()->setValue( v );
horizontalScrollBar()->setValue( h );
滚动条的可见性不影响视图的位置和大小,它们只是"叠加"。
相关文章:
- OpenCV Rect x 和 y 表示 (column,row) 或 (row,column)
- OpenCV断言对RECT ROI失败了
- 使 ShowHint 使用多个不同的 Rect 处理自定义控件,每个 Rect 都有自己的 Hint
- Qt QGraphicsScene::setSceneRect() 实际上并没有设置场景 rect
- 为什么static_cast不适用于cv :: rect
- 尝试初始化"rect"时类"rect"无效使用 (C++)
- 即使"friend class rect"在平方类中被评论,为什么它要改变矩形类的私有变量?
- cv::Rect 的异常处理
- 旋转直接与rect或旋转的openCV的交点
- 在 JNA 中分配 WinDef.RECT 结构
- OpenCV级联分类器检测输入Mat边界外的MultiScale结果Rect
- 如何验证rect是否在OpenCV中的cv::Mat内部
- Android OpenCV Create Rect
- RECT,将自定义的RECT结构传递到需要RECT的函数中
- 如何将简历::Mat转换为简历::Rect
- 矢量<矢量>ROI的图像拼接使用<Rect>
- 检查来自不同类的两个Rect之间的冲突
- 把rect分成水平部分,去掉第一部分
- Cocos2dx导入QuartzCore框架时出现(对Point、Rect、Size的引用不明确)错误
- 在QGraphicsView中设置QGraphicsScene的精确视图区域(rect) -一个更好的fitInView