【问题标题】:QObject not finding Signal in custom classQObject 在自定义类中找不到信号
【发布时间】:2017-11-22 01:54:13
【问题描述】:

当我将鼠标悬停在 MyGraphicsRectItem(它是 QGraphicsRectItem 和 QObject 的子类)上时,我试图让其颜色略有不同,因此我在头文件中创建了一个信号:

class MyGraphicsRectItem : public QObject, public QGraphicsRectItem
{
    Q_OBJECT
    ...
signals:
     void hoverEnterEvent(QGraphicsSceneHoverEvent *event);
}

在我的 MyMainWindow 中,我以这种方式连接 hoverEnterEvent(编辑,澄清:a1 是 MyGraphicsRectItem):

connect(a1, &MyGraphicsRectItem::hoverEnterEvent, [this, i](QGraphicsSceneHoverEvent *event) {
            hoverRect(event, i);
});

不幸的是,我收到了QObject::connect: signal not found in MyGraphicsRectItem 错误消息,即使我在头文件中明确定义了它。有什么想法吗?

【问题讨论】:

  • 与接受的答案相同的方法也应该对您有所帮助:stackoverflow.com/questions/16794695/…
  • 嗨,我不认为 hoverEnterEvent 超载,所以我不太确定它是否适用。我确实尝试实施该解决方案,但它对我没有任何作用。
  • 您在何处/何时看到错误消息——在编译时还是在运行时?另外,代码中a1的类型是什么?
  • 在运行时显示。 a1 是我个人定义的 MyGraphicsRectItem 类型。
  • 如果它是运行时的,那么唯一的猜测是实例 a1 不是预期的。然后需要更完整的代码。

标签: qt


【解决方案1】:

您的第三个论点似乎不正确。

在下面的示例中有一个 C++ lambda 示例。 (搜索 C++11 lambda)

http://doc.qt.io/qt-5/signalsandslots.html

基于您的第三个参数应该如下所示。试试这个

[=] (QGraphicsSceneHoverEvent *event,int i) { this->hoverRect(event, i);}

整个连接语句看起来如下所示。

connect(a1, &MyGraphicsRectItem::hoverEnterEvent, [=] (QGraphicsSceneHoverEvent *event,int i) {
            this->hoverRect(event, i);
});

【讨论】:

  • 您好,很抱歉回复晚了,但问题是 hoverEnterEvent 不接受第二个整数参数,所以使用您的解决方案时出现不兼容的插槽和信号错误,我尝试编辑您的语句到 [=, &i] 以某种方式将 i 作为变量传递,但它仍然找不到信号。如果您有任何其他建议,请告诉我。
  • 好的。使用 QSignalmapper,如下例所示。 stackoverflow.com/questions/21150890/… 然后从发布的示例中的连接语句中删除“I”。
猜你喜欢
  • 2016-10-03
  • 2017-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多