2011-01-27 22 views
5

Temel olarak, OpenGL'yi öğrenirken bana yardımcı olacak bir çok basit Qt uygulaması yapıyorum.
fikri, iki pencerem, bir GL bağlamı (QGLWidget'ten türetilmiş GLWidget) ve diğeri, birkaç ilerleme çubuğu ve bir metin alanı içeren basit bir GUI'dir.Basit Qt Uygulaması, bir sinyal/yuva eklendiğinde derlemeyi reddediyor

Uygulamayı derlemek ve çalıştırmak için kullanabilirim ve her şey güzel UNTIL İki pencere arasında sinyal ve yuva bağlamaya çalıştım. QGLWidget, sinyaller ve yuvalar hakkında resmi eğitici ve int connect() belgelerini okudum.

göstermek için: my main.cpp dosyası:

#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(); 
} 

alıyorum belirli derleyici hataları şunlardır:

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)'

Bunun ilgili olup olmadığından emin değilim, ancak Qt 4.7.0 (32 bit) temel alınarak Qt Creator 2.0.1 kullanıyorum. 32 bit Windows 7 Ultimate çalıştıran.

cevap

9

connect, QObject öğesinin statik bir üyesidir. Bir QObject bağlamı dışında kullanıldığında, aşağıdakiler gibi kapsam belirtmek gerekir:

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

Aksi takdirde derleyici başka fonksiyon Açıkçası küresel kapsamda bulunduğu ve connect() denilen aramaya çalıştığında, bu diğer fonksiyon farklı kullanır parametreleri.

+0

D'oh! Bunun gibi aptal bir şey olduğunu anladım. Çok teşekkürler! – rjacks

+0

Endişelenme, ben de orada oldum ;-) – Fred

+0

Bence herkes Qt ile birkaç çalışmadan sonra bunu yaptı! – tibur

4

Windows soket API'sinden bağlantı işlevini kullanmaya çalışıyorsunuz. Deneyin:

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