2011-01-27 5 views
5

Donc, fondamentalement, je fais une très simple Qt app pour m'aider pendant que j'apprends OpenGL. L'idée
est que j'ai deux fenêtres, l'une est un contexte GL (GLWidget, dérivé de QGLWidget) et l'autre est une interface graphique simple avec quelques barres de progression et une zone de texte.Simple Qt App refuse de compiler une fois qu'un signal/slot est ajouté

Je peux obtenir l'application pour compiler et exécuter, et tout est beau jusqu'à ce que j'ai essayé de connecter les signaux et le slot entre les deux fenêtres. J'ai lu les docs sur QGLWidget, le tutoriel officiel sur les signaux et les slots, et la documentation pour int connect().

Pour illustrer: mon fichier main.cpp:

#include <QApplication> 
#include <QObject> 

#include "glwidget.h" 
#include "mainwindow.h" 

int main(int argc, char *argv[]) 
{ 
    QApplication app(argc, argv); 

    MainWindow *mWindow = new MainWindow(); 
    GLWidget *gl = new GLWidget(); 

    //If this line is commented out, the program compiles and runs 
    connect(gl, SIGNAL(fpsReport(float)), mWindow, SLOT(updateFPS(float)); 

    mWindow->show(); 
    gl->show(); 

    return app.exec(); 
} 

Les erreurs du compilateur spécifiques que je reçois sont:

In function 'int qMain(int, char**)':
invalid conversion from 'GLWidget*' to 'SOCKET'
cannot convert 'const char*' to 'const sockaddr*' for argument '2' to 'int
connect(SOCKET, const sockaddr*, int)'

Je ne sais pas si cela est pertinent, mais j'utilise Qt Creator 2.0.1, basé sur Qt 4.7.0 (32 bits). Exécution de Windows 7 Ultimate 32 bits.

Répondre

9

connect est un membre statique de QObject. Lorsqu'il est utilisé en dehors d'un contexte QObject, vous devez spécifier la portée en tant que tel:

QObject::connect(gl, SIGNAL(fpsReport(float)), mWindow, SLOT(updateFPS(float)); 

Sinon, le compilateur essaie d'appeler une autre fonction appelée connect() qui réside dans la portée globale, et de toute évidence, cette autre fonction utilise différents paramètres.

+0

D'oh! Je pensais que c'était quelque chose de stupide comme ça. Merci beaucoup! – rjacks

+0

Ne vous inquiétez pas, j'ai été là aussi ;-) – Fred

+0

Je pense que tout le monde a fait celui-ci après quelques travaux avec Qt! – tibur

4

Vous essayez d'utiliser la fonction connect de l'API de socket Windows. Essayez:

QObject::connect(gl, SIGNAL(fpsReport(float)), mWindow, SLOT(updateFPS(float)); 
Questions connexes