为什么我的插槽没有被调用?

问题描述:

我有这个类:为什么我的插槽没有被调用?

 

class CustomEdit : public QTextEdit 
{ 
    Q_GADGET 

public: 
    CustomEdit(QWidget* parent); 

public slots: 
    void onTextChanged(); 
}; 
 
 

CustomEdit::CustomEdit(QWidget* parent) 
    : QTextEdit(parent) 
{ 
    connect(this, SIGNAL(textChanged()), this, SLOT(onTextChanged())); 
} 


void CustomEdit::onTextChanged() 
{ 
    // ... do stuff 
} 

 

onTextChanged方法,当我键入文本编辑控件永远不会被调用。
我错过了什么?

+0

当按下return时onTextChanged()会被调用吗? – 2010-06-10 02:34:17

+1

控制台说QObject :: connect的任何内容吗?没有这样的插槽什么的? – 2010-06-10 05:02:20

+0

[Qt应用程序中似乎无法识别的插槽]的可能重复(http://stackoverflow.com/questions/1394912/slot-seemingly-not-recognized-in-qt-app) – Troubadour 2012-04-30 21:15:39

所有包含信号或插槽的类必须在其声明顶部提到Q_OBJECT。它们还必须从QObject派生(直接或间接)。

1)你正在发射从被阻塞的信号的对象(见的QObject :: blockSignals())

2)的接收器:使用Q_OBJECT

几个其他的可能性

尝试没有线程关联。如果接收者创建的线程对象消失并且接收者不移动到另一个线程,它将不处理事件(插槽是特殊情况)。

一个额外的可能性,我只花了大约一天在我自己的代码来解决:

  • 信号是在超类及其子类中定义。 connect()调用正在对子类指针进行操作,但信号是从超类代码发出的。解决办法是从子类中删除信号声明,无论如何,这是错误的。