c++ - 如何移动 QGraphicsView 的内容?
问题描述
我正在尝试在 Qt 中为我的 QGraphicsView 实现缩放系统。但是,我不想使用QGraphicsView::scale()
,因为我只想缩放某些项目。当我放大时,一切看起来都很好(我的意思是元素位于视图的中心)。但是,当我缩小时,所有内容都固定在左上角。我可以放大,它最终会回到中心,但是当我再次缩小时,它仍然被锚定。这是我的意思的说明:
这是我目前在鼠标滚动上所做的:
for (int y = 0; y < canvasSize[0]; i++)
{
for (int x = 0; x < canvasSize[1]; j++)
{
pixels[y][x]->setRect(y*zoomLevel, x*zoomLevel, zoomLevel, zoomLevel); // Scaling the items
}
}
QPointF delta = target_viewport_pos - mouse_event->pos();
if (qAbs(delta.x()) > 5 || qAbs(delta.y()) > 5) {
target_viewport_pos = mouse_event->pos();
target_scene_pos = _view->mapToScene(mouse_event->pos());
}
_view->centerOn(target_scene_pos);
QPointF delta_viewport_pos = target_viewport_pos - QPointF(_view->viewport()->width() / 2.0,
_view->viewport()->height() / 2.0);
QPointF viewport_center = _view->mapFromScene(target_scene_pos) - delta_viewport_pos;
_view->centerOn(_view->mapToScene(viewport_center.toPoint()));
移动视图的代码(我承认不是我自己编写的)在我使用时运行良好,QGraphicsView::scale()
但是当我使用自定义缩放时,它什么也不做。为什么它不起作用?
解决方案
推荐阅读
- python - 查询 cassandra 表以获取最后 N 条记录
- architecture - 实体框架核心迁移和报告的架构(例如粗体报告)
- c++ - 如何确定是否为 boost::program_options 提供了参数,或者是否使用默认值?
- typescript - 如何使 ESLint 强制导入 .ts 文件以具有 .js 扩展名?
- java - Java 线程 - 如何正确等待线程完成?
- python - 为什么我会得到不同形状的张量错误?
- spring-boot - 我想更改 AggregationResults 的返回类型
- c++ - 重载 operator() 和可变参数模板
- xcode - XCode 13.1 导致 Airpods 在 Monterey 上咝咝作响
- typescript - 有没有办法直接在 ES6 类方法上声明属性