首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Qt: QGraphicsScene鼠标位置总是(0,0)

Qt是一个跨平台的C++应用程序开发框架,提供了丰富的工具和库,用于开发图形界面和跨平台应用程序。QGraphicsScene是Qt中用于管理2D图形项的类,它提供了一个场景,可以在其中添加、移动和交互图形项。

在使用QGraphicsScene时,有时会遇到鼠标位置总是(0,0)的问题。这个问题通常是由于没有正确处理鼠标事件导致的。为了解决这个问题,可以按照以下步骤进行操作:

  1. 确保正确设置了场景的大小和视图的大小。如果场景或视图的大小为0,那么鼠标事件可能无法正确地被捕获。
  2. 在场景类中重写鼠标事件处理函数,例如mousePressEvent、mouseMoveEvent和mouseReleaseEvent等。在这些函数中,可以通过event->scenePos()获取鼠标在场景中的位置。
  3. 确保正确设置了视图的坐标转换。如果视图的坐标转换没有正确设置,那么鼠标事件的位置可能无法正确地转换到场景坐标系中。
  4. 如果使用了自定义的图形项,确保正确实现了图形项的鼠标事件处理函数。在这些函数中,可以通过event->pos()获取鼠标在图形项中的位置。

总结起来,解决QGraphicsScene鼠标位置总是(0,0)的问题需要正确设置场景和视图的大小,正确处理鼠标事件,并确保正确设置了坐标转换。这样就能够获取到正确的鼠标位置信息。

关于Qt的更多信息和相关产品介绍,您可以参考腾讯云的官方文档和网站:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

QT】图形视图、动画框架

图形项坐标 图像项使用自己的本地坐标系统,坐标通常以它们的中心为原点(0,0),而这也是所有变换的中心。...当创建一个自定义的图形项时,只需要考虑图形项的坐标系统,QGraphicsScene和QGraphicsView会完成其它所有的转换。 图像项的位置是指图像项的原点在其父图像项或场景中的位置。...视图的坐标 视图的坐标就是部件的坐标,视图坐标的每一个单位对应一个像素,原点总是在QGraphicsView视口的左上角,而右下角是宽高。所有的鼠标事件和拖放事件都是使用视图坐标来接收的。...一个图像项可以接收悬停事件,当鼠标进入它的区域之中时,它就会收到一个QGraphicsSceneHoverEnter事件,鼠标在图像项的区域移动时,QGraphicsScene就会向该图像项发送GraphicsSceneHoverLeave...Qt的事件系统来驱动状态机。

1.5K30

qt学习笔记(五) QGraphicsPixmapItem与QGraphicsScene的编程实例 图标拖动渐变效果

qt中提供了QGphicsView,QGraphicsScene,QGraphicsItem,QGraphicsPixmapItem是QGraphicsItem的子类 分辨创建它们的实例:view,scene...方法中最后加入�QGraphicsItem::mousePressEvent(event);解决问题,就是说你获取到了鼠标事件,可是依旧让qt处理这个鼠标事件。...,继承自QGraphicsScene,我的目的是要获取其鼠标事件 nodeui.h与nodeui.cpp是定义了类NodeUI,继承自QGraphicsPixmapItem,目的相当多。...) const { QRect rect = this->pixmap().rect(); //return QRectF(rect); return QRectF(0,0,rect.width...//推断根据是当前单击的nodeui对象的pos与存储在nodeUiPosListsd的位置比較,相等则为单击 bool MainWindow::isNodeUiClicked() { int

1.6K10

PyQt5中使用图元实现高效绘制场景

Qt图形视图框架介绍 Qt图形视图框架(Qt Graphics View Framework)支持开发快速高效的2D矢量图形场景。场景可以包含数百万个对象,每个对象都有自己的功能和行为。...Qt图形视图框架组件 Qt图形视图框架是基于Model-View的架构实现的,主要包含三个相关Qt对象组件分别是: QGraphicsView QGraphicsScene QGraphicsItem...其中QGraphicsScene可以看成是Model-View架构中的Model部分;QGraphicsView可以看成是Model-View架构中的View部分;每个Scene绑定到多个View、QGraphicsItem...QGraphicsScene主要的功能有以下: - 负责检测图元对象是否重叠跟交会 - 负责图元选择与编辑管理 - 负责查找与发现图元对象跟位置 - 负责接受信号事件并传递给图元 Qt图形视图框架使用...main_win.setCentralWidget(myPanel) main_win.setMinimumSize(820, 620) main_win.show() app.exec() 运行结果演示(图元3 支持鼠标选择与拖动

12910

9.5 QGraphicsView视图框架

9.5 QGraphicsView视图框架 Qt Graphics View 用于管理交互大量定制的 2D 图形对象,提供了可视化显示对象的视图 widget,并支持缩放和旋转功能。...比如:可以处理键盘事件,鼠标移动、松开、双击事件,并且可以跟踪鼠标移动。Graphics View视图本身是一个基于item的M-V架构的框架,它的每一个组件都是一个item。...Qt Graphics View框架结构主要包含三个类:场景类(QGraphicsScene)、视图类(QGraphicsView)、图元类(QGraphicsItem)。...其中,场景类(QGraphicsScene)是用于管理大量图元对象的容器,视图类(QGraphicsView)是用于显示场景中的图元对象。...示例: QGraphicsScene *scene=new QGraphicsScene; scene->addText("Hello, world!")

52410

Qt官方示例-拖放机器人

这样可以确保当鼠标指针悬停在项目上时,光标将有机会进入Qt::OpenHandCursor状态。...最后,我们调用setAcceptedMouseButtons()以确保该项目只能处理Qt::LeftButton。这可以大大简化鼠标事件处理程序,因为我们始终可以假定仅按下并释放了鼠标左键。...ColorItem::boundingRect() const { return QRectF(-15.5, -15.5, 34, 34); }   项的边界矩形是固定的30x30单位,以该项的原点(0,...我们的实现将光标设置回Qt::OpenHandCursor。鼠标按下和释放事件处理程序共同为用户提供有用的视觉反馈:将鼠标指针移到上时CircleItem,光标将变为张开的手。...该实现首先检查鼠标是否已被拖动足够远以消除鼠标抖动噪声。我们仅想在鼠标被拖动的距离大于应用程序开始拖动的距离时开始拖动。

4.7K41

Qt Designer基本控件介绍——Display Widgets(显示小部件)

:当单击标签中的超链接,希望在新窗口打开这个超链接时,setOpenExternalLinks特性必须设置为True,即setOpenExternalLinks(True) linkHovered:当鼠标指针滑过标签中嵌入的超链接时...setTransformationAnchor(): 设置视口变换的锚点,这个属性控制当视图做变换时应该如何摆放场景的位置。默认情况是在变换时保持视图的中心点不变。...), QBrush(Qt.blue)) scene.addRect(220, 80, 200, 160, QPen(Qt.red)) self.view = QGraphicsView...是一个设置日历的控件,它提供了一个基于月份的视图,允许用户通过鼠标和键盘选择日期,默认是选中今天,可以对日期的范围进行限制。...self.on_button_clicked) self.timer_obj1 = QBasicTimer() self.step = 0 # 窗口的大小,前面两个参数是位置信息

7.9K20

Qt中国象棋一—— Qt 2D 绘图入门

最近想用Qt写一个中国象棋的项目,在网上找了几个例子后,发现关于绘图部分基础为0 ,于是根据项目需要学习一下。...Qt的2D绘图是基于QPainter类的。QPainter既可以绘制几何图形(点、线、矩形、椭圆、弧形、饼状图、多边形和贝塞尔曲线等)也可以绘制像素映射、图像和文字。...Qt中围绕着QGraphicsView、QGraphicsScene、QGraphicsItem类引入了一种全新的“图形视图”体系【了解概念即可,不作详细介绍】。——摘自C++ GUI Qt4编程。...如图,左上角顶点是坐标原点(0,0),X轴向右为正,Y轴向下为正,默认每个像素占1×1大小的像素。视口、窗口、世界矩阵等概念有兴趣的同志们可以深入了解下。 ?...二、画一条线段 在绘图设备上(一般是窗口部件上)绘图,需要重新实现Qt的绘图事件——paintEvent。 什么情况下会产一个绘图事件呢?

1.8K10

OpenCV3 和 Qt5 计算机视觉:1~5

即使是最简单的任务,例如选择图形项目并将其拖动到其他位置,我们也必须编写大量代码并经历令人困惑的鼠标事件处理。 放大和缩小图像也是如此。...QGraphicsScene和QGraphicsView都提供了转换彼此适合的位置值的功能。 这些项目或QGraphicsItem子类的实例是QGraphicsScene中包含的项目。...正如本章前面所看到的,我们总是可以使用QGraphicsScene类中的mouseGrabberItem函数来获取抓取器项目。...重要的是要注意,所有变换都假设一个原点(通常为(0,0)),可以使用setTransformOriginPoint对其进行更改。 scenePos函数可用于获取项目在场景中的位置。...我们实现了mouseMoveEvent来拾取鼠标位置(在场景坐标中,这非常重要); 然后我们确保在放大(而不是缩小)之后,该视图确保所采集的点位于屏幕的中心。

5.8K20

qtabwidget切换tab_qt tablewidget

首先是Tab页的拖出,主要通过QTabBar的鼠标事件来处理,如果拖出了QTabBar的区域就生成一个QDrag,用于显示Tab页的快照跟随鼠标。...然后是Tab页的拖回,也是判断鼠标释放时的位置,如果在QTabBar范围,就添加到QTabBar中。...(1.目前这种方式效果不理想,太生硬了,没有浏览器Tab拖拽那种流畅的感觉,后期修改的话可能需要实时判断位置,而不是鼠标释放时才去处理;2.没有很好的利用Qt的drag drop事件接口,后期可以尝试下...painter.isActive()) { //这里想做标题栏贴在内容之上 //但是没法获取默认标题栏的图像啊,就随便画一个矩形框 //如果设置了外部主题颜色,需要改下 QRect title_rect{0,0...|Qt::AlignVCenter," "+drag_tab->windowTitle()); painter.drawRect(pixmap.rect().adjusted(0,0,-1,-1));

1.7K10

Qt的QChartView实现缩放和放大功能

QChartView开启鼠标拖动放大功能: ui->wdChart->setRubberBand(QChartView::RectangleRubberBand); 开启后,拖动鼠标区域自动放大,鼠标右键点击自动缩小...增加一个信号: signals: void sgl_recoverRange(MyChartView *p); 需要在自定义的MyChartView中区分出来是否是鼠标左键的单击事件还是鼠标左键的拖动...一定要把标题的层设置为legend层 customPlot->legend->insertRow(0);// 插入一行 customPlot->legend->addElement(0,0...);//背景颜色起始点,从图左上角开始,y方向0~400之间为红色渐变,开始位置为红色 plotGradient.setFinalStop(0,400);//y方向 >400 为绿色渐变,结束位置为绿色...; //设置QCPAxisRect轴矩形的背景颜色 QLinearGradient axisRectGradient; axisRectGradient.setStart(0,0

3.4K40

使用PyQt的QLabel组件实现选定目标框功能的方法示例

实现思路   具体要实现的功能是,在视频显示区域,点击鼠标左键,开启选择,按照鼠标左键,移动游标,慢慢地绘制出红色的目标框。释放鼠标左键就停止选择目标框。...子类的命名为Label,继承自QLabel类,在子类中重写鼠标事件函数,接受鼠标在Label对象上位置信号。...绘制事件 继承鼠标事件绘制类,创建画笔类对象,在这可以设置画笔的颜色,画线的粗细,如果绘制标志位self.select_roi_flag是打开的,那么将事件对象的位置数据传给x1,y1。...其他要注意的问题   子类Label除了能自定义选择目标框,还要在更新内容是清除绘制内容,实现这个功能可以通过设置清空标志位clear_flag,当标志位打开的时候,将起始坐标和更新坐标重置为:(0,...0)(0,0),这样绘制内容就被更新了。

2.6K10
领券