【问题标题】:Clean way to get mousePressed event notified to QGraphicsView将 mousePressed 事件通知给 QGraphicsView 的简洁方法
【发布时间】:2023-01-09 06:19:12
【问题描述】:

我继承自 QGraphicsItemGroup 并制作了一个类,该类保留指向其包含的项目的指针,以便我以后可以引用它们并更改属性。它有一个椭圆项目和一个订单项目,我只希望椭圆是可点击的。我需要将椭圆的按下事件传播到 QGraphicsView,以便我可以向周围的一些小部件发送信号。

到目前为止,我还尝试从 QGraphicsObject 继承以使信号可用,但在尝试使用 scene->addItem 时遇到了不明确的基本错误。我尝试投射到 QGraphicsItemGroup 但我仍然收到错误。我也尝试从 QObject 继承但没有成功。

我是 QGraphics 的新手,我知道 QGraphics 框架有很多用于用户交互甚至 GraphicsItems 之间交互的工具,但这真的让我很吃惊。

获得这种行为的正确方法是什么?

【问题讨论】:

    标签: qgraphicsview qgraphicsitem


    【解决方案1】:

    创建一个单独的“发射器”类

    要允许您的 QGraphicsItemGroup 子类发射信号,您可以创建一个单独的“发射器”类,该类继承自 QObject。然后,您可以在 QGraphicsItemGroup 的子类中添加此发射器类的实例。然后发射器对象可以根据需要为您的子类发射信号。

    QGraphicsItemGroup 被视为单个项目

    不幸的是,QGraphicsItemGroup 的实例被视为单个项目,因此每个 mousePressEvent 将属于整个组而不是该组的成员之一(即椭圆项目或线项目)。如果您希望 mousePressEvent 根据单击哪个项目而表现不同,则它们需要是单独的项目,或者您可以尝试使用 line->setParentItem(ellipse) 链接这两个项目而不使用 QGraphicsItemGroup。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-06
      • 1970-01-01
      • 2021-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-15
      • 2010-12-06
      相关资源
      最近更新 更多