Simple Qt App отказывается компилироваться после добавления сигнала / слота - PullRequest
5 голосов
/ 27 января 2011

В общем, я делаю очень простое приложение Qt, чтобы помочь мне в изучении OpenGL.Идея
состоит в том, что у меня есть два окна, одно из которых является контекстом GL (GLWidget, производным от QGLWidget), а другое - простой графический интерфейс с парой индикаторов выполнения и текстовой областью.

Я могу заставить приложение компилироваться и запускаться, и все прекрасно, пока я не попытался соединить сигналы и слот между двумя окнами.Я прочитал документы по 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 Creator 2.0.1, основанный на Qt 4.7.0 (32 бит).Под управлением 32-битной Windows 7 Ultimate.

Ответы [ 2 ]

9 голосов
/ 27 января 2011

connect является статическим членом QObject. При использовании вне контекста QObject вам необходимо указать область видимости как таковую:

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

В противном случае компилятор пытается вызвать другую функцию с именем connect(), которая находится в глобальной области видимости, и, очевидно, эта другая функция использует другие параметры.

4 голосов
/ 27 января 2011

Вы пытаетесь использовать функцию подключения из API Windows Socket. Попробуйте:

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