【问题标题】:Getting the visible area of a QGraphicsScene in QGraphicsView [duplicate]在 QGraphicsView 中获取 QGraphicsScene 的可见区域 [重复]
【发布时间】:2013-07-29 12:04:15
【问题描述】:

如果我将像素图设置为比窗口大的QGraphicsScene,它将添加滚动条,那么是否可以获得QGraphicsView 中显示的内容?

滚动和更改显示区域时是否引发任何事件?

这是我正在谈论的屏幕:

谢谢

【问题讨论】:

    标签: c++ qt qt4 qgraphicsview


    【解决方案1】:

    您可以按如下方式确定场景坐标中的可见区域:

    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) 信号以跟踪滚动。

    【讨论】:

    • 您确定 QScrollBar 连接吗?我在编译时得到了这个: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 :)
    • 非常感谢,您为我节省了几个小时 :D 我尝试了很多不同的解决方案。
    【解决方案2】:

    另外,请注意视口包含一个函数,可以将场景的某个区域放入视图中,以便您可以使用以下命令查看所有该区域:-

    void QGraphicsView::fitInView(const QRectF & rect, Qt::AspectRatioMode aspectRatioMode = Qt::IgnoreAspectRatio)
    

    【讨论】:

    • 不正确。 sceneRect 返回视图中所有滚动条位置可见的总面积。场景矩形可以大于视口,并且不依赖于滚动条位置。
    • 糟糕,我的错误。你是对的,谢谢指出。我已经编辑了答案的那部分。
    猜你喜欢
    • 2015-11-02
    • 1970-01-01
    • 2016-11-12
    • 1970-01-01
    • 2017-02-16
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    • 2016-07-23
    相关资源
    最近更新 更多