2010-06-10 69 views
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方法,當我鍵入文本編輯控件永遠不會被調用。
我錯過了什麼?

+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

回答

1

所有包含信號或插槽的類必須在其聲明頂部提到Q_OBJECT。它們還必須從QObject派生(直接或間接)。

1)你正在發射從被阻塞的信號的對象(見的QObject :: blockSignals())

2)的接收器:使用Q_OBJECT

1

幾個其他的可能性

嘗試沒有線程關聯。如果接收者創建的線程對象消失並且接收者不移動到另一個線程,它將不處理事件(插槽是特殊情況)。

1

一個額外的可能性,我只花了大約一天在我自己的代碼來解決:

  • 信號是在超類及其子類中定義。 connect()調用正在對子類指針進行操作,但信號是從超類代碼發出的。解決辦法是從子類中刪除信號聲明,無論如何,這是錯誤的。
相關問題