- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我已将 QGraphicsItem 子类化到我自己的自定义类 Hexagon 中。当我尝试使用 QGraphicsView::itemAt
或 QGraphicsScene::itemAt
等函数时,它不会返回我的任何 Hexagon
对象,因为该函数会查找 QGraphicsItems
。
我怎样才能告诉它寻找 Hexagon
对象呢?或者我是否需要更改我的 Hexagon
类中的某些内容?或者甚至重新实现 itemAt()
?
目前,我还在子类化 QGraphicsView
,特别是 mousePressedEvent
以获取有关被单击的 Hexagon
对象的一些信息。
void LatticeView::mousePressEvent(QMouseEvent *event)
{
Hexagon *hexagon = itemAt(event->pos());
...
}
但是当我尝试编译时,出现以下错误:
invalid conversion from 'QGraphicsItem*' to 'Hexagon*'
我想要的是能够获得被点击的 Hexagon
对象,这样我就可以访问我在 Hexagon
类中定义的一些变量不隐含在 QGraphicsItem
类中。
最佳答案
要使其正常工作,您需要先转换指针,然后再将其分配给另一种类型的指针变量。
Hexagon *hexagon = (Hexagon*)itemAt(event->pos());
但是这里存在危险,因为 itemAt()
可能返回 NULL
或者该项目可能不是 Hexagon
项目。
事实上,您应该像这样使用 C++ 样式转换:
Hexagon *hexagon = dynamic_cast<Hexagon*>(itemAt(event->pos()));
if (hexagon != NULL)
{
hexagon->hexagonMethod();
}
这将需要通过编译器提供运行时类型信息。
还有一个名为 type() 的 QGraphicsItem
函数可用这将允许您使用 qgraphicsitem_cast()
但这需要一些额外的工作,包括定义一个 enum
。
还有一点需要注意。根据您的场景和项目消耗鼠标事件的方式,您可能不会总是看到您对 mousePressEvent()
的覆盖在您期望的时候被调用,因为如果鼠标事件可能永远不会到达 View 被场景中的某物消耗。
关于c++ - 子类化 QGraphicsItem 使我无法在 QGraphicsScene/View 上使用 itemAt(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9050246/
我有个小问题 我正在编写 Petri Net 模拟器... 我有两个不同的类(class) class PNItem : public QObject, public QGraphicsIte
我刚刚开始使用 Qt,所以请多多包涵。当我使用 QTableWidget->getItemAt() 时,它返回一个不同的项目,如果我使用 currentItemChanged 并单击相同的项目。我认为
我有一个自定义的 qGraphicsScene 实现和一个我点击的自定义 qGraphicsItem,但是 itemAt 函数从不返回值,即使我相当确定我正在点击该项目。 void VScene::m
我已经使用 repeater 定义了如下所示的网格 Grid { id: grid x: 8;y:8 clip: true smooth: false rows
考虑这个极其简单的示例,您可以在其中围绕 QGraphicsScene 拖动一个正方形(使用 PyQt,C++ 用户将 self 读作 this) import sys from PyQt4 impo
我正在尝试在 QGraphicsScene 中创建一个点阵。我有一个按钮,它用随机数填充一个二维数组,然后我会在数组有 0 的每个位置上绘制一个像素。现在,当我想再次生成矩阵时,我想检查每个像素和数组
我正在开发一个 Windows 应用程序,我在一个对话框中查询来自 Postgres 的一些数据,并在表格小部件中手动显示输出。 m_ui->tableWidget->setRowCount(join
我创建了一个自定义 QGraphicsItem。并覆盖 boundingRect() 和 paint()。 QRectF myTile::boundingRect() const { return
我正在尝试使用 itemAt(gif->pos()) 获取 gif-Item。但我正在获取底层背景图像。 从 Qt-Help 中我了解到 itemAt() 将给出最上面的可见项。但我的问题是我的项目是
我正在尝试使用插件设置 GUI。在我当前的阶段,我需要用户点击并指定点的位置。 我设置的插件架构要求插件返回插件希望使用的 QGraphicsItem。在主程序中( future 的插件作者将无法访问
我目前正在开发一个程序,在 QFormLayout 中,我有两列 QLineEdits。我将第一列存储在列表中(这意味着它们很容易访问),而第二列未存储在变量或列表中。我试图访问第二列中 QLineE
我有一个插槽,可以在给定一个点的情况下创建上下文菜单。但是,无论我使用哪种方法从该点返回位置,table->itemAt(pos) 始终返回 0。有什么方法可以打印出表格的行/列位置,以便我可以逆向工
我已将 QGraphicsItem 子类化到我自己的自定义类 Hexagon 中。当我尝试使用 QGraphicsView::itemAt 或 QGraphicsScene::itemAt 等函数时,
我正在制作一个文章阅读应用程序(类似于 Bing 新闻应用程序)并且我正在使用 FlipView去文章之间。 FlipView将其 ItemsSource 数据绑定(bind)到 Observable
我有两个问题: QTransform() 在 itemAt() 中意味着什么?下面这句话是Qt doc中的内容,但我看不懂: deviceTransform is the transformation
我是一名优秀的程序员,十分优秀!