2010-07-21 74 views
0

我正在嘗試使用QGLWidget的內容的FPS更新狀態欄。我已經連接在它們如下(在類的MainWin):Qt4插槽和信號:Qt4無法找到信號

glWidget = new GLWidget; 
ui.verticalLayout->addWidget(glWidget); 

connect(glWidget,  SIGNAL(updateFPSSignal(float) ), 
     this,   SLOT( updateFPSSlot(float) )); 
} 

槽如下:

void MainWin::updateFPSSlot(float fps){ 
this->statusBar()->showMessage(QString::number(fps), 0); 
} 

在的MainWin類定義,我有:

public slots: 
    void updateFPSSlot(float fps); 

而信號如下:(據我所知,這不應該在這裏,但程序拒絕編譯沒有它)。

void GLWidget::updateFPSSignal(float fps){} 

我在GLWidget類的定義如下:

signals: 
    void updateFPSSignal(float fps); 

計算FPS後,我打電話:

emit updateFPSSignal(fps); 

然而,當應用程序啓動時,以下是打印出來:

Object::connect: No such signal QGLWidget::updateFPSSignal(float) in /Users/usm/Desktop/OGLTest/MainWin.cpp:12 
Object::connect: (receiver name: 'MainWinClass') 

我讀過的教程都沒有任何幫助,我相信修復對於更有經驗的人來說很簡單。

謝謝。

+0

爲清楚起見,請寫下「Qt」而不是「QT」。謝謝 – rubenvb 2010-07-21 12:59:52

回答

4

你有

class GLWidget : public QGLWidget { 

    Q_OBJECT 

    /* ... rest of declaration ... */ 

}; 
在你的類聲明

?你有沒有把你的glwidget.h頭文件放到你的.pro文件的HEADERS部分?信號的執行是由moc完成的,而不是你。

+0

啊,是的,我把Q_OBJECT放在類聲明中,我還需要在重新編譯之前運行qmake。謝謝! – usm 2010-07-21 12:41:13

+0

這也應該在信號聲明後擺脫大括號的需要,因爲moc現在應該爲您生成一個實現。 – 2010-07-21 18:22:21