【发布时间】:2013-07-29 12:04:15
【问题描述】:
如果我将像素图设置为比窗口大的QGraphicsScene,它将添加滚动条,那么是否可以获得QGraphicsView 中显示的内容?
滚动和更改显示区域时是否引发任何事件?
这是我正在谈论的屏幕:
谢谢
【问题讨论】:
标签: c++ qt qt4 qgraphicsview
如果我将像素图设置为比窗口大的QGraphicsScene,它将添加滚动条,那么是否可以获得QGraphicsView 中显示的内容?
滚动和更改显示区域时是否引发任何事件?
这是我正在谈论的屏幕:
谢谢
【问题讨论】:
标签: c++ qt qt4 qgraphicsview
您可以按如下方式确定场景坐标中的可见区域:
QRect viewport_rect(0, 0, view->viewport()->width(), view->viewport()->height());
QRectF visible_scene_rect = view->mapToScene(viewport_rect).boundingRect();
您可以使用QGraphicsItem::mapFromScene将场景坐标转换为物品坐标。
您可以使用view->horizontalScrollBar() 和view->verticalScrollBar() 来获取QScrollBar* 对象。连接到这些对象的valueChanged(int) 信号以跟踪滚动。
【讨论】:
connect(horizontalScrollBar(), SIGNAL(valueChanged(int)), ((QGraphicsView*)this), SLOT(scrollMoved(int)));graphicScene.cpp:30:107: error: no matching function for call to ‘GraphicScene::connect(QScrollBar*, const char [19], QGraphicsView*, const char [18])’
QScrollBar :)
另外,请注意视口包含一个函数,可以将场景的某个区域放入视图中,以便您可以使用以下命令查看所有该区域:-
void QGraphicsView::fitInView(const QRectF & rect, Qt::AspectRatioMode aspectRatioMode = Qt::IgnoreAspectRatio)
【讨论】:
sceneRect 返回视图中所有滚动条位置可见的总面积。场景矩形可以大于视口,并且不依赖于滚动条位置。