2010-12-01 16 views
7

在QT程序,我有一個QWidget類是另一個類的父類的這樣:QT插槽和繼承:爲什麼我的程序試圖連接父代而不是子類?

class Renderer : public QGLWidget 
{ 
    Q_OBJECT 
    .... 
} 

class A : public Renderer 
{ .... } 

現在我有A類插槽是不存在的渲染器,但是當我嘗試運行該程序未能連接到A類:

Object::connect: <sender name: 'push_button'> 
Object::connect: <receiver name: 'A'> 
Object::connect: No such slot Renderer::loadDialog() in <file path> 

爲什麼它試圖連接到Renderer而不是A?我應該在同名的渲染器中有一個插槽嗎?

感謝

編輯:

這裏的插槽A中的聲明:

public slots: 
    void loadDialog(); 

,併爲連接,我依靠Qt Creator的居多,但這裏是什麼在ui_windows.h文件中:

QObject::connect(pushButton, SIGNAL(clicked()), A, SLOT(loadDialog())); 

希望清理一下東西:)

回答

12

你能告訴你連接信號和插槽的地方嗎?也許這也將是有益的,看看在A級插槽聲明

編輯:

嘗試添加Q_OBJECT宏在子類A.另一件事可能是插槽不是虛擬的(但根據我閱讀,應該沒有區別)。

這些只是猜測,您發佈的代碼對我來說看起來不錯。我沒有在該計算機上使用Qt,因此我無法嘗試:(

+0

加在編輯之上。 – confusedKid 2010-12-01 07:57:50

+2

每當你想新的信號/插槽申報你的子類,你必須使用Q_OBJECT宏 – 2010-12-06 09:00:07

相關問題