无法将信号连接到自己类的插槽
Can't connect signal to slot of own class
我需要使用可以包含链接的QGraphcisTextItem,所以我基于此创建了自己的类。这是标题:
class ClickableGraphicsTextItem : public QGraphicsTextItem
{
public:
ClickableGraphicsTextItem();
void setHtml(const QString &html);
public slots:
void linkClicked(QString link);
protected:
void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event);
};
和菲共
ClickableGraphicsTextItem::ClickableGraphicsTextItem()
{
connect(this,SIGNAL(linkActivated(QString)),this,SLOT(linkClicked(QString)));
}
void ClickableGraphicsTextItem::setHtml(const QString &html){
QGraphicsTextItem::setHtml(html);
qWarning() << "HTML Was set";
}
void ClickableGraphicsTextItem::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event){
qWarning() << "I was double cliked";
}
void ClickableGraphicsTextItem::linkClicked(QString link){
qWarning() << "Link" << link << "was clicked";
}
现在,当我运行程序时,我在输出控制台中收到此消息错误:
QObject::connect: No such slot QGraphicsTextItem::linkClicked(QString)
现在我不明白的是为什么它试图连接到QGraphicsTextItem而不是我的ClickableGrapchicsTextItem。
我该如何解决这个问题?
Qt中的Signals&Slots可以通过以下两种方式之一实现:
- 传统上,使用
SIGNAL()
宏和SLOT()
宏。 - 使用新的信号槽语法。
使用 SIGNAL()
和 SLOT()
宏时,信号槽连接是在运行时构建的。这是通过基于字符串的查找执行的。为此,元对象编译器 (MOC) 需要提供其他信息,这些信息通过将 Q_OBJECT 宏添加到类声明的顶部来提供。
使用新的信号槽语法不再需要元对象编译器的帮助1)。连接在编译时实现,仅使用标准C++功能。基于字符串的查找已替换为函数指针。
1) 虽然仍然需要为所有包含信号或插槽的类添加
Q_OBJECT
宏,但有时从 QObject
派生就足够了。但是,这不是合同性的,应被视为(未记录的)实现细节。
首先,
您应该在类声明中添加Q_OBJECT。
class ClickableGraphicsTextItem : public QGraphicsTextItem
{Q_OBJECT
public:
...
...
...
}
它应该正常工作。
相关文章:
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- 如何在没有信号的情况下从C++执行QML插槽
- 从Q_INVOKABLE功能或插槽中更改QQuick图像源
- 升压信号2将插槽传递到成员功能以断开连接
- 如何在qt中将信号和插槽与另一个对象连接 --解决了
- C++ 信号和插槽不工作:插槽不响应事件
- NS3 插槽混淆(需要帮助理解)
- QObject::连接无法将信号连接到*this*对象的插槽
- QT 插槽未在主线程上调用
- 通过插槽和信号在不同线程中的两个qt对象之间进行通信
- 控制带有信号/插槽的Qt QML滑动视图
- Qt 信号/插槽问题
- QT5 信号不会激活插槽内的功能
- Qt5:连接:如果插槽的参数少于信号,如何使用"连接"
- 需要实例化不同类/对象并在启动时确定的硬件插槽的设计模式
- Qt信号和插槽如果从QRunnable或其他线程调用,则不起作用
- Qt插槽调用了两次
- C++Qt信号和插槽
- worker是否可以在Qt中使用信号/插槽连接停止自己的线程?
- 无法将信号连接到自己类的插槽