0

我有这堂课:


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当我在编辑控件中键入文本时,永远不会调用该方法。
我错过了什么?

4

3 回答 3

1

我花了大约一天时间在自己的代码中解决了另一种可能性:

  • 信号在超类及其子类中定义。connect() 调用在子类指针上运行,但信号是从超类代码发出的。解决方案是从子类中删除信号声明,无论如何这都是错误的。
于 2014-03-03T18:36:39.103 回答
1

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

尝试使用 Q_OBJECT

于 2010-06-10T05:41:17.457 回答
1

其他几种可能性:

1) 您发出信号的对象被阻塞(参见 QObject::blockSignals())

2) 接收者没有线程亲和性。如果创建接收器的线程对象消失并且接收器没有移动到另一个线程,它将不会处理事件(插槽是一种特殊情况)。

于 2011-08-10T20:52:06.193 回答