2010-07-21 1 views
0

Я пытаюсь получить строку состояния для обновления с помощью FPS содержимого QGLWidget. Я соединил их следующим образом (в классе 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); 

После расчета кадров в секунду, я называю:

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

ответ

4

у вас есть

class GLWidget : public QGLWidget { 

    Q_OBJECT 

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

}; 

в вашем объявлении класса? и вы поместили свой заголовок glwidget.h в раздел HEADERS вашего .pro-файла? реализация сигнала выполняется moc, а не вы.

+0

Ах да, я положил Q_OBJECT в объявление класса, и мне также нужно было запустить qmake перед перекомпиляцией. Благодаря! – usm

+0

Это также должно избавиться от необходимости скобок после объявления сигнала, так как moc теперь должен генерировать реализацию для вас. –