QGraphicsView缩放后显示区域在原区域的相对坐标该如何计算?

☆热带冰川☆ 2020-09-17 09:25:29
在工作中遇到的问题,考虑用户使用便利性,参考图片查看器的功能,在主体显示区使用QGraphicsView显示图像,用鼠标左键可以拖拽画面,用鼠标滚轮可以缩放,在预览区显示整个画面,并用红色方框标示主体显示区所显示的区域,如下图所示。
现在的问题是,预览区的红色方框与主体显示区的显示区域还没有关联起来,如果我能够知道显示区域在原区域的相对坐标值,那就很方便,请问各位大神们有没有什么好办法呢?



附上源码链接:https://gitee.com/HelloWorldApple/QGraphicsView-example.git
...全文
1815 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
☆热带冰川☆ 2020-09-20
  • 打赏
  • 举报
回复 1
引用 3 楼 这是一个正经昵称 的回复:
[quote=引用 2 楼 ☆热带冰川☆ 的回复:][quote=引用 1 楼 这是一个正经昵称 的回复:]用ScrollBar的值去换算?
用 ScrollBar 怎么换算?[/quote] ScrollBar的最大值=图片size - View的size吧 这应该比较明显。[/quote] 多谢楼上指导! 以下是我的代码,MyGraphicsView继承自QGraphicsView,依据两个QScrollBar的显示状态、pageStep()与maximum()各项参数计算得出,pageStep()意义为viewport的水平方向或垂直方向的像素数,计算出相对坐标就可以向预览区发信号了。

void MyGraphicsView::CalculateViewportGeometry()
{
    QRect rectScene = scene()->itemsBoundingRect().toRect();
    QRect rectViewport;
    if (horizontalScrollBar()->isHidden()) {
        rectViewport.setX(rectScene.x());
        rectViewport.setWidth(rectScene.width());
    } else {
        int nScaleWidth = horizontalScrollBar()->pageStep() + horizontalScrollBar()->maximum();
        double dScaleRate = double(nScaleWidth) / rectScene.width();
        rectViewport.setX(horizontalScrollBar()->value() / dScaleRate);
        rectViewport.setWidth(horizontalScrollBar()->pageStep() / dScaleRate);
    }
    if (verticalScrollBar()->isHidden()) {
        rectViewport.setY(0);
        rectViewport.setHeight(rectScene.height());
    } else {
        int nScaleHeight = verticalScrollBar()->pageStep() + verticalScrollBar()->maximum();
        double dScaleRate = double(nScaleHeight) / rectScene.height();
        rectViewport.setY(verticalScrollBar()->value() / dScaleRate);
        rectViewport.setHeight(verticalScrollBar()->pageStep() / dScaleRate);
    }
    emit setPreviewRect(rectViewport);
}
☆热带冰川☆ 2020-09-17
  • 打赏
  • 举报
回复
引用 3 楼 这是一个正经昵称 的回复:
[quote=引用 2 楼 ☆热带冰川☆ 的回复:][quote=引用 1 楼 这是一个正经昵称 的回复:]用ScrollBar的值去换算?
用 ScrollBar 怎么换算?[/quote] ScrollBar的最大值=图片size - View的size吧 这应该比较明显。[/quote] 好的,谢谢提醒,我试下看
  • 打赏
  • 举报
回复
引用 2 楼 ☆热带冰川☆ 的回复:
[quote=引用 1 楼 这是一个正经昵称 的回复:]用ScrollBar的值去换算?
用 ScrollBar 怎么换算?[/quote] ScrollBar的最大值=图片size - View的size吧 这应该比较明显。
☆热带冰川☆ 2020-09-17
  • 打赏
  • 举报
回复
引用 1 楼 这是一个正经昵称 的回复:
用ScrollBar的值去换算?
用 ScrollBar 怎么换算?
  • 打赏
  • 举报
回复
用ScrollBar的值去换算?

16,203

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧