为什么我的插槽没有被调用?
问题描述:
我有这个类:为什么我的插槽没有被调用?
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
方法,当我键入文本编辑控件永远不会被调用。
我错过了什么?
答
所有包含信号或插槽的类必须在其声明顶部提到Q_OBJECT。它们还必须从QObject派生(直接或间接)。
1)你正在发射从被阻塞的信号的对象(见的QObject :: blockSignals())
2)的接收器:使用Q_OBJECT
答
几个其他的可能性
尝试没有线程关联。如果接收者创建的线程对象消失并且接收者不移动到另一个线程,它将不处理事件(插槽是特殊情况)。
答
一个额外的可能性,我只花了大约一天在我自己的代码来解决:
- 信号是在超类及其子类中定义。 connect()调用正在对子类指针进行操作,但信号是从超类代码发出的。解决办法是从子类中删除信号声明,无论如何,这是错误的。
当按下return时onTextChanged()会被调用吗? – 2010-06-10 02:34:17
控制台说QObject :: connect的任何内容吗?没有这样的插槽什么的? – 2010-06-10 05:02:20
[Qt应用程序中似乎无法识别的插槽]的可能重复(http://stackoverflow.com/questions/1394912/slot-seemingly-not-recognized-in-qt-app) – Troubadour 2012-04-30 21:15:39