MousePressEvent,QGraphicsView中的位置偏移

2023-11-24

我有一些困难QGraphicsView and QGraphicsScene。 当我缩放/取消缩放场景并使用 mousePressEvent 创建项目时,我的位置有一个偏移。如何避免这种情况?

event.pos()似乎是问题..

from PyQt4 import QtCore, QtGui

class graphicsItem (QtGui.QGraphicsItem):
    def __init__ (self):
        super(graphicsItem, self).__init__()
        self.rectF = QtCore.QRectF(0,0,10,10)
    def boundingRect (self):
        return self.rectF
    def paint (self, painter=None, style=None, widget=None):
        painter.fillRect(self.rectF, QtCore.Qt.red)

class graphicsScene (QtGui.QGraphicsScene):
    def __init__ (self, parent=None):
        super (graphicsScene, self).__init__ (parent)

class graphicsView (QtGui.QGraphicsView):
    def __init__ (self, parent = None):
        super (graphicsView, self).__init__ (parent)
        self.parent = parent
    def mousePressEvent(self, event):
        super (graphicsView, self).mousePressEvent(event)
        item = graphicsItem()
        position = QtCore.QPointF(event.pos()) - item.rectF.center()
        item.setPos(position.x() , position.y())
        self.parent.scene.addItem(item)
    def wheelEvent (self, event):
        super (graphicsView, self).wheelEvent(event)
        factor = 1.2
        if event.delta() < 0 :
            factor = 1.0 / factor
        self.scale(factor, factor)

class window (QtGui.QMainWindow):
    def __init__ (self, parent = None ) :
        super (window, self).__init__(parent)
        self.width = 800
        self.height = 600

        self.resize(self.width,self.height)
        self.mainLayout = QtGui.QVBoxLayout(self)

        self.view = graphicsView(self)
        self.scene = graphicsScene(self)
        self.view.setScene (self.scene)

        factor = 1
        self.scene.setSceneRect(0, 0, self.width * factor, self.height * factor)
        self.view.setMinimumSize(self.width, self.height)

        self.mainLayout.addWidget(self.view)

    def show (self):
        super (window, self).show()  

重新实现mousePressEvent在现场,而不是视图。

这样一来,event参数将是QGraphicsSceneMouseEvent,它有几个有用的附加功能 - 包括scenePos,这正是您想要的:

class graphicsScene(QtGui.QGraphicsScene):
    def __init__ (self, parent=None):
        super(graphicsScene, self).__init__ (parent)

    def mousePressEvent(self, event):
        super(graphicsScene, self).mousePressEvent(event)
        item = graphicsItem()
        position = QtCore.QPointF(event.scenePos()) - item.rectF.center()
        item.setPos(position.x() , position.y())
        self.addItem(item)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MousePressEvent,QGraphicsView中的位置偏移 的相关文章

随机推荐

  • 将数组键从下划线大小写递归转换为驼峰大小写

    我必须想出一种方法将使用下划线 下划线大小写 的数组键转换为驼峰命名法 这必须递归完成 因为我不知道哪些数组将被输入到该方法中 我想出了这个 private function convertKeysToCamelCase apiRespon
  • 从C#到SQL Server的批量插入策略

    在我们当前的项目中 客户将向我们的系统发送复杂 嵌套消息的集合 这些消息的频率约为 1000 2000 条消息 每秒 这些复杂对象包含交易数据 待添加 以及主数据 如果找不到 将添加 但客户不传递主数据的 ID 而是传递 名称 列 系统检查
  • 在命令上设置 git 默认标志

    我想知道是否有办法为 git 命令默认设置标志 具体来说 我想设置 abbrev commit标志以便在执行时git log 我要执行git log abbrev commit 与问题不同 有没有办法为 git 命令默认设置一个标志 显然没
  • 如何使基本类型属性可选?

    我想在我的 JSONModel 类中创建一些原始属性选项 请参阅下面的代码 import JSONModel h protocol GreenModel
  • 悬停时颜色转灰度在 IE11 中不起作用

    我在用着Gray网站上的一些元素 但是 我无法让它在 IE11 中工作 例如 在下面的小提琴中 我使用 JS 添加grayscale and grayscale fade类 以便图像在悬停时从彩色渐变为灰度 我如何让它在 IE11 中工作
  • 在ggplot2中创建堆积密度图

    我正在尝试在 ggplot2 中创建堆积密度图 并且我还试图了解 qplot 相对于 ggplot 的工作原理 我在网上找到了下面的例子 qplot depth density data diamonds geom density fill
  • 为什么我的自定义控件的 Text 属性不会显示在“属性”窗口中?

    我有一个继承自 UserControl 的用户控件 这是一个按钮 因此我尝试使用像真实按钮一样的 Text 属性来更改按钮中的文本 而不是像 Text 这样命名我自己的文本 我有以下代码 但它不起作用 即它没有显示在属性窗口中 标签的名称是
  • 架构 i386 的未定义符号,为 iOS 构建?

    我已经下载了 iProcessing 框架 允许您为 iPhone 构建本机 javascript 应用程序 当我尝试编译时 我得到 Undefined symbols for architecture i386 ADBannerConte
  • 在计算机之间导入/导出 Chrome devtools 断点和设置

    Quoting 最初的想法 我遇到了一个问题 我需要将所有调试器断点共享给我的同事 以便在他结束时调试问题 因此考虑实施诸如从一个系统导出调试器点并在另一系统导入之类的东西 由于 devtools 不提供内置的导入 导出功能 还有其他方法吗
  • 将远程图像保存到隔离存储中

    我尝试使用此代码下载图像 void downloadImage WebClient client new WebClient client DownloadStringCompleted new DownloadStringComplete
  • 如何防止 URLDownloadToFile 从缓存中检索?

    我正在使用 URLDownloadToFile 从网站检索文件 后续调用将返回原始文件而不是更新版本 我假设它正在检索缓存的版本 在调用 URLDownloadToFile 之前使用相同的 URL 调用 DeleteUrlCacheEntr
  • invalidateList 和 invalidateDisplayList 有什么区别?

    我有一个 DataGrid 其中填充有 ArrayCollection 中的对象 更新对象的字段之一后 我希望屏幕更新 数据源不可绑定 因为我是在运行时构建它的 而且我还不知道如何使其可动态绑定 这是另一个问题 在这种情况下 如果我在网格上
  • 清理 Mercurial 存储库

    我的 hg 存储库的历史记录中有一堆文件已被删除 它们导致存储库变得相当大 其中一些是图像 以及项目早期的 sql 转储 以及其他一开始就不应该提交的东西 我如何让 Mercurial 忘记这些东西并再次将我的存储库缩小到合理的大小 我是否
  • C# 中的非对称加密示例

    我需要通过 TCP 连接将机密数据发送到服务器 我做了很多研究并且理解了理论部分 根据我的研究 我想做以下事情 注意有一个服务器和一个客户端 我们假设客户端或服务器的公钥可以被任何人获取 客户创建他的公钥和私钥 他能够用他的私钥加密并用他的
  • 不带值的 MediaWiki URL 参数

    The query的一部分URL似乎由键值对组成 并由相关联 我一直习惯使用 jQuery param 函数对我的查询字符串进行 URL 编码 因为我发现它使我的代码更具可读性和可维护性 在过去的几天里 我发现自己在调用 MediaWiki
  • SimpleDateFormat 类中有哪些可用的日期格式?

    谁能告诉我 SimpleDateFormat 类中可用的日期格式 我已经浏览了 api 但找不到满意的答案 非常感谢任何帮助 下面详细描述了日期和时间格式 SimpleDateFormat Java Platform SE 7 日期和时间模
  • 如何将 String 上的 PageRequest 作为数值进行排序

    我目前有一个系统 可以过滤和排序数据库中的记录并将它们作为分页对象返回 其中一行是这样的 final PageRequest request new PageRequest this pagingSettings getPageNumber
  • 已知起点、终点和半径,如何求圆弧圆周上的点?

    请参阅下图以直观地了解我的问题 我有点 1 和 2 的坐标 它们是通过使用其他可用信息的公式得出的 参见问题 如何计算已知半径和圆心的圆上的点 我现在需要做的 与轨道建设分开 是将点 1 和点 2 之间的点绘制为绿色 这样做的最佳方法是什么
  • Cordova 6.4.0 Android 构建发布 apk 时出错

    我有一个项目在 cordova 6 3 1 上运行良好 然后我将 cordova 和我的项目更新到 6 4 0 在此之后 我第一次构建时 gradle 也自动更新了 现在我遇到一个重要的问题 我需要在 build json 文件中包含密钥库
  • MousePressEvent,QGraphicsView中的位置偏移

    我有一些困难QGraphicsView and QGraphicsScene 当我缩放 取消缩放场景并使用 mousePressEvent 创建项目时 我的位置有一个偏移 如何避免这种情况 event pos 似乎是问题 from PyQt