QGraphicsItem移动事件-获取绝对位置

2024-04-10

我有一个QGraphicsEllipseItem我想要移动并在移动时触发信号。 所以我子类化了QGraphicsEllipseItem and QObject并覆盖了itemChange方法来触发信号。这一切似乎都有效,但报告的位置似乎与该项目的旧位置相关。即使询问该项目的位置似乎只是为了检索相对坐标。

这是一些代码来清楚地说明我所做的事情:

class MyGraphicsEllipseItem: public QObject, public QGraphicsEllipseItem
{
  Q_OBJECT

public:

  MyGraphicsEllipseItem(qreal x, qreal y, qreal w, qreal h, QGraphicsItem *parent = 0, QGraphicsScene *scene = 0)
    :QGraphicsEllipseItem(x,y,w,h, parent, scene)
  {}

  QVariant itemChange(GraphicsItemChange change, const QVariant &value);

signals:
  void itemMoved(QPointF p);
};

QVariant MyGraphicsEllipseItem::itemChange( GraphicsItemChange change, const QVariant  &value )
{ 
  // value seems to contain position relative start of moving
  if (change == ItemPositionChange){
    emit itemMoved(value.toPointF());
  }
  return QGraphicsEllipseItem::itemChange(change, value); // i allso tried to call this before the emiting
}

这是项目创建:

  MyGraphicsEllipseItem* ellipse = new MyGraphicsEllipseItem(someX, someY, someW, someH);
  ellipse->setFlag(QGraphicsItem::ItemIsMovable, true);
  ellipse->setFlag(QGraphicsItem::ItemSendsScenePositionChanges, true);
  connect(ellipse, SIGNAL(itemMoved(QPointF)), SLOT(on_itemMoved(QPointF)));
  graphicsView->scene()->addItem(ellipse);

和插槽:

void MainWindow::on_itemMoved( QPointF p)
{
  MyGraphicsEllipseItem* el = dynamic_cast<MyGraphicsEllipseItem*>(QObject::sender());
  QPointF newPos = el->scenePos();
  scaleLbl->setText(QString("(%1, %2) - (%3, %4)").arg(newPos.x()).arg(newPos.y()).arg(p.x()).arg(p.y()));
}

奇怪的是newpos and p几乎相等,但包含相对于运动开始的坐标。

如何获取被拖动对象的当前位置?还有其他方法可以实现目标吗?


这不是错误,而是标准行为。

构造函数要求 QRectF 来确定椭圆的大小和原点。两种常用的尺寸是 (0,0,width,height)(原点位于左上角)和(-0.5 * 宽度,-0.5 * 高度,宽度,高度)(原点位于中心)。

With setPos,该原点设置在所需位置。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QGraphicsItem移动事件-获取绝对位置 的相关文章

  • 如何以编程方式在 qml 中渲染 vtk 项目?

    到目前为止 我了解到我们在 QML 中有两个线程 我们的主应用程序线程和我们的 场景图 线程 http doc qt io qt 5 qtquick visualcanvas scenegraph html http doc qt io q
  • 在 Mac 上启动没有停靠图标的 Qt 托盘进程

    我有一个包含 GUI 服务和托盘的捆绑包 请注意 它们是三个独立的过程 这可能听起来很奇怪 托盘是服务的代表 用户可以打开 GUI 如果没有托盘存在 它会创建一个托盘 所以在我的 GUI 代码中我有如下内容 QProcess startDe
  • QT:隐藏对话框/窗口的标题栏

    我有一个父窗口 其中按钮的单击事件函数具有以下几行 SplashScreenDialog splScrDlg new SplashScreenDialog this splScrDlg gt show 我想要的是我想从对话框 或窗口 中删除
  • QtWebKit 无需安装 flash 播放器即可播放 HTML5 视频

    安装最新的 Flash 播放器并启用插件后 我的简单示例可以播放 YouTube 视频 操作系统 Windows 7 Qt 4 7 4 32 位和 64 位均可 但是 根据 http www youtube com html5 我的示例浏览
  • 当更多的小部件放置在 QScrollArea 中时,如何调整 QScrollArea 的内容大小

    我有一个Q滚动区域 http doc qt digia com 4 7 snapshot qscrollarea html小部件 一开始是空的 它有一个垂直布局 带有一个 QGridLayout 和一个垂直间隔符 以将其保持在顶部 并防止其
  • Qt、QML 和 Windows 8 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我一直对Qt框架引入的QML很好奇 但从未有机会使用它 但现在随着 Windows 8 的到来 基于旧式小部件的界面将变得过时 只是我
  • 如何安全地销毁 QThread?

    我想正确地销毁一个QThread在 Qt 5 3 中 到目前为止我已经得到 MyClass MyClass QObject parent QObject parent mThread new QThread this QObject con
  • 更改 Qt 中的标签

    我正在尝试制作一个由按钮和标签组成的简单程序 当按下按钮时 它应该将标签文本更改为程序内 QString 变量中的任何内容 到目前为止 这是我的代码 这是我的 widget h 文件 class Widget public QWidget
  • Qt for Android:无法签署应用程序的发布版本

    我正在使用 Qt 5 13 和 Qt Creator 4 9 2 我可以成功构建 Android 应用程序的调试版本 但是当我尝试编译发布版本时 我得到 16 57 35 过程 opt Qt 5 13 0 android armv7 bin
  • 迁移到 Qt6/PyQt6:Qt5 中所有已弃用的短格式名称是什么?

    我正在尝试从以下位置迁移代码库PyQt5 to PyQt6 我读过这篇文章 参见https www pythonguis com faq pyqt5 vs pyqt6 https www pythonguis com faq pyqt5 v
  • PyQt5:如何将 QPushButton 连接到插槽?

    好吧 几乎所有教程 可理解的用人类语言编写的文档都是针对 PyQt4 的 但是 PyQt5 改变了整个 将按钮连接到插槽 的工作方式 但我仍然不知道如何做到这一点 我在 QtDesigner 中做了一个快速 gui 并且有一个 QPushB
  • const QList 警告 = QList() << 0; gcc 4.7.2 的段错误

    因此 主题行中提到的代码会导致 Qt 4 8 3 和 gcc 4 7 2 出现分段错误 这是在 cpp 文件中的任何类 结构之外 并且与 gcc 4 4 一起使用 const QList
  • 纹理openGl。 C++、qt

    我试图用草纹理覆盖我的地形 由高度图制成 但它没有按预期工作 我什至无法在简单的 GL QUAD 上获取纹理 结果是多色网络 void GLWidget initializeGL glEnable GL TEXTURE 2D 在 QGLwi
  • 由于 QCoreApplication 事件循环,QThread 永远不会退出

    Problem 所以我有一个 CommandRetriever 类来保存一些命令 并且should在不同的线程上执行这些命令 class CommandRetriever public CommandRetriever CommandRet
  • Qt同步QNetworkAccessManager获取

    执行同步 QNetworkAccessManager get 的正确方法是什么 The qt wiki http qt shoutwiki com wiki How to wait synchronously for a Signal in
  • Qt3D 是 Qt5 的一部分吗?

    我在windows中安装了Qt5库 但Qt助手中没有关于Qt3D的文档 Qt3D 是 Qt5 的一部分还是已从发布版本 5 中删除 是的 Qt 3D 成为标准 Qt 库Qt 5 7 发布 http blog qt io blog 2016
  • 将 Android 应用程序部署到手机:错误:[install_itemfolder_01] 错误 1 ​​Windows

    我已经安装了我可能需要的所有组件 我已经上网两天了 但找不到这个问题的答案 我检查了我的 apache ant javac java JRE JDK Qt 变量一切正常 Qt 喜欢我的所有设置 除了当我尝试将应用程序部署到模拟器或设备时出现
  • 使用 KDE Kirigami 时未找到 QML 模块

    所以我决定在我的应用程序中使用 KDE Kirigami UI 框架 所以我按照说明进行操作here https api kde org frameworks kirigami html index html 我将存储库克隆到我的应用程序目
  • 使用 Qt 进行拖放:悬停时了解目标应用程序 - 这可能吗?

    我目前正在探索从 Qt 应用程序拖放到未知目标应用程序的可能性 问题是 Qt 应用程序是否可以接收有关即将接收 drop 的应用程序的信息 例如进程名称或标题 一个 虚构的 示例可以是将绘图从 Qt 窗口拖动到文本编辑器或电子表格编辑器 在
  • 从 Qt 中的半透明小部件中擦除绘制区域

    我面临着必须擦除 Qt 小部件上先前绘制的区域的问题 基本思想是 用户通过单击并拖动鼠标来选择屏幕的一个区域 并在所选区域上绘制一个矩形 标题 class ClearBack public QWidget Q OBJECT public e

随机推荐

  • 如何从矩阵中提取行名?

    我有一个行名称为日期的矩阵 我想将这些行名称提取到一个变量中 然后使用rownames 将这些日期应用到我拥有的另一个矩阵中 假设该矩阵称为 data matrix 每当我跑步时 data matrix 0 我得到了所有日期的打印输出 所以
  • Nodejs TCP连接客户端端口分配

    我使用nodejs在客户端和服务器之间创建了tcp连接 网络模块 https nodejs org api net html 服务器正在侦听已经预定义的端口 并且客户端正在连接到该端口 据我了解客户端的端口是由节点动态分配的 那是对的吗 节
  • 系统()的替代方案

    我最近开始接触C 编程 并且获得了很多经验 我过去的几个程序一直在使用 system 命令 我读过这应该是一个非常糟糕的主意 首先 为什么这是一个坏主意 我在 Linux 上使用它来执行诸如清除屏幕 例如 system clear 和启动程
  • 强制 Intellij IDEA 重新读取所有 Maven 依赖项

    如何强制intellij idea重新读取 更新pom文件中指定的所有依赖项 Press Ctrl Shift A to find actions and input reload you will find the Reload All
  • 如果事件处理程序不存在,则以编程方式在 VB.NET 中添加事件处理程序

    我正在尝试对 ASP NET 网页中的多个控件使用单个事件处理程序 当且仅当事件处理程序尚不存在时 我想在运行时添加事件处理程序 在 C 中 我将如下所示编写 if myTextBox OnTextChanged null myTextBo
  • 为什么 MicroMeter 定时器返回零?

    考虑以下代码 public static void main String args Timer timer Metrics timer item processing for int i 0 i lt 100 i timer record
  • 将项目添加到 ListView,保持滚动位置并且看不到滚动跳跃

    我正在构建一个类似于 Google Hangouts 聊天界面的界面 新消息将添加到列表底部 向上滚动到列表顶部将触发加载以前的消息历史记录 当历史记录从网络传入时 这些消息将添加到列表的顶部 并且不应从触发加载时用户停止的位置触发任何类型
  • 无法确定 Architect 命令 Angular 的项目或目标

    C Users muhiuddin TOWERTECH test testapp gt ng build target production or C Users muhiuddin TOWERTECH test testapp gt ng
  • 如何在开发环境中使用 MobileIron 的 Web@Work 进行测试?

    我有一个可以在任何浏览器中完美运行的网站 现在我想使用 MobileIron 的 Web Work 浏览器将该网站用作书签 以创建一个通过 MobileIron 打包的基本 iOS 应用程序 Web Work的基本介绍在这里 https w
  • java标准序列化顺序

    我想知道以下示例类的属性将按什么顺序序列化 public class Example implements Serializable private static final long serialVersionUID 8845294179
  • 底层提供商无法打开

    HI 我正在使用 VS2010 并使用 Microsoft Entity Framework 4 0 我正在开发一个 Windows 应用程序 我在我的应用程序中绑定了几个组合 工作正常 void BindNatureOfIndustryC
  • 为什么我的 javascript getter/setter 需要下划线?

    执行 Get 或 Put 操作a抛出一个 RangeError 指出Maximum call stack size exceeded指向this a在吸气剂和 在设置器中 let someObject get a return this a
  • apollo graphql 架构 React-admin 初学者

    这些技术是全新的 到目前为止我所看到的让我非常兴奋 我很难找到我所坚持的东西的例子 React admin 的文档建议我的模式说 Posts 遵循 allPosts 和 allPostsMeta allPosts 部分工作没有问题 但自然
  • 如何从自定义视图中访问layout_height?

    我有一个自定义视图 我只是希望访问 xml 布局值layout height 我目前正在获取该信息并将其存储在 onMeasure 期间 但这仅在首次绘制视图时发生 我的视图是 XY 图 它需要尽早知道其高度 以便可以开始执行计算 该视图位
  • 悬停在父 div 上时更改子 div 的背景颜色吗? [复制]

    这个问题在这里已经有答案了 我想在父 div 悬停时更改子 div 的背景颜色 目前 我可以更改颜色 但只能将鼠标悬停在子 div 上 但是 我也想更改父 div 悬停时的颜色 div class content div class log
  • 如何使用 Selenium Safari Webdriver

    我正在尝试使用 Safari WebDriver 并且按照说明进行操作here https code google com p selenium wiki SafariDriverInternals构建 Safari 驱动程序 但现在我不知
  • 稍后如何在 SwiftUI 中访问内容视图的元素?

    假设我有一个像这样的内容视图 struct ContentView View State private var selection 0 var body some View TabView selection selection Cust
  • 不确定 openmp 循环中应该共享或私有什么

    我有一个更新矩阵 A 的循环 我想将其设为 openmp 但我不确定哪些变量应该共享和私有 我本以为只有 ii 和 jj 就可以工作 但事实并非如此 我想我也需要在某个地方进行 OMP ATOMIC UPDATE 该循环仅计算 N 和 N
  • 为什么我收到“参数从未使用过 [E0392]”?

    我正在尝试用 Rust 实现八叉树 八叉树在类型上是通用的 但有一个约束 即它应该实现通用特征 pub trait Generable u fn generate children self data U gt Vec u
  • QGraphicsItem移动事件-获取绝对位置

    我有一个QGraphicsEllipseItem我想要移动并在移动时触发信号 所以我子类化了QGraphicsEllipseItem and QObject并覆盖了itemChange方法来触发信号 这一切似乎都有效 但报告的位置似乎与该项