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声明,不管怎样,它是错误地存在的
CustomEdit::CustomEdit(QWidget* parent)
: QTextEdit(parent)
{
connect( this, SIGNAL(textChanged()), this, SLOT(onTextChanged()));
}
void CustomEdit::onTextChanged ()
{
// ... do stuff
}