C++ 为什么我的位置没人叫?

C++ 为什么我的位置没人叫?,c++,qt,signals-slots,qtextedit,qgadget,C++,Qt,Signals Slots,Qtextedit,Qgadget,我有这门课: class CustomEdit : public QTextEdit { Q_GADGET public: CustomEdit(QWidget* parent); public slots: void onTextChanged (); }; 在编辑控件中键入文本时,从不调用onTextChanged方法。 我缺少什么?所有包含信号或插槽的类都必须在声明的顶部提到Q_对象。它们还必须(直接或间接)从QoObject派生 尝试使用Q_对象所有包含信

我有这门课:


class CustomEdit : public QTextEdit
{
    Q_GADGET

public:
    CustomEdit(QWidget* parent);

public slots:
    void onTextChanged ();
};
在编辑控件中键入文本时,从不调用
onTextChanged
方法。

我缺少什么?

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


尝试使用Q_对象

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


尝试使用Q_对象

和其他几种可能性:

1) 从中发射信号的对象被阻止(请参见QObject::blockSignals()


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

还有一些其他可能性:

1) 从中发射信号的对象被阻止(请参见QObject::blockSignals()


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

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

  • 信号在超类及其子类中定义。connect()调用在子类指针上运行,但信号是从超类代码发出的。解决方案是从子类中删除signal声明,不管怎样,它是错误地存在的

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

  • 信号在超类及其子类中定义。connect()调用在子类指针上运行,但信号是从超类代码发出的。解决方案是从子类中删除signal声明,不管怎样,它是错误地存在的

按return键时是否会调用onTextChanged()?console是否说明了有关QObject::connect的内容?没有这样的插槽或类似的东西?当您按return键时是否调用了onTextChanged()的可能副本?控制台是否说明了有关QObject::connect的任何内容?没有这样的插槽或什么?可能是

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


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