当我将鼠标悬停在它上面时,我试图让我的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
错误消息。有什么想法吗?
答案 0 :(得分:0)
你的第三个论点似乎不正确。
以下示例中有一个C ++ lambdas示例。 (搜索C ++ 11 lambdas)
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);
});