一旦添加了信号/插槽,简单的Qt App就会拒绝编译

时间:2011-01-27 19:36:21

标签: qt compiler-errors signals-slots

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

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

举例说明:我的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();
}

我得到的具体编译器错误是:

  

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

不确定这是否相关,但我正在使用基于Qt 4.7.0(32位)的Qt Creator 2.0.1。 运行32位Windows 7旗舰版。

2 个答案:

答案 0 :(得分:9)

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

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

否则,编译器会尝试调用另一个名为connect()的函数,该函数驻留在全局作用域中,显然,这个函数使用不同的参数。

答案 1 :(得分:4)

您正在尝试使用Windows套接字API中的connect函数。试试:

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