简单Qt应用程序在添加信号/插槽后拒绝编译

简单Qt应用程序在添加信号/插槽后拒绝编译,qt,compiler-errors,signals-slots,Qt,Compiler Errors,Signals Slots,所以,基本上,我正在制作一个非常简单的Qt应用程序来帮助我学习OpenGL。想法 我有两个窗口,一个是GL上下文(GLWidget,源自QGLWidget),另一个是一个简单的GUI,带有两个进度条和一个文本区域 我可以让应用程序编译并运行,在我尝试连接两个窗口之间的信号和插槽之前,一切都很美好。我已经阅读了QGLWidget上的文档、信号和插槽的官方教程以及int connect()的文档 要说明:my main.cpp文件: #include <QApplication> #in

所以,基本上,我正在制作一个非常简单的Qt应用程序来帮助我学习OpenGL。想法
我有两个窗口,一个是GL上下文(GLWidget,源自QGLWidget),另一个是一个简单的GUI,带有两个进度条和一个文本区域

我可以让应用程序编译并运行,在我尝试连接两个窗口之间的信号和插槽之前,一切都很美好。我已经阅读了QGLWidget上的文档、信号和插槽的官方教程以及
int connect()
的文档

要说明:my 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();
}
#包括
#包括
#包括“glwidget.h”
#包括“mainwindow.h”
int main(int argc,char*argv[])
{
QApplication应用程序(argc、argv);
主窗口*mWindow=新的主窗口();
GLWidget*gl=新GLWidget();
//如果这一行被注释掉,程序将编译并运行
连接(gl、信号(fpsReport(float))、mWindow、插槽(updateFPS(float));
mWindow->show();
gl->show();
返回app.exec();
}
我遇到的具体编译器错误有:

在函数“int qMain(int,char**)”中:

从“GLWidget*”到“SOCKET”的转换无效

无法将参数“2”的“const char*”转换为“const sockaddr*”,将其转换为“int”

connect(SOCKET,const sockaddr*,int)

不确定这是否相关,但我使用的是基于Qt4.7.0(32位)的QtCreator 2.0.1。
运行32位Windows 7 Ultimate。

您正在尝试使用Windows socket API中的connect函数。请尝试:

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

connect是QObject的静态成员。当在QObject上下文之外使用时,需要指定如下范围:

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

否则,编译器会尝试调用另一个名为
connect()
的函数,该函数位于全局范围内,显然,另一个函数使用了不同的参数。

D'oh!我觉得这是一个很愚蠢的函数。非常感谢!别担心,我也去过;-)我想每个人都是在使用Qt几次之后做的!