2015-05-16 3 views
0

У меня большая проблема. Я создал фиктивный проект, чтобы изолировать мою ошибку. Потому что проект с 6 файлами, и невозможно добавить весь код здесь, я создал github project и добавил сюда весь код, описывая эту идею здесь. Вы можете посмотреть код там.Ошибка только при построении проекта Qt из командной строки

Исходный код main.cpp:

#include <QApplication> 
#include <QObject> 

#include "mainwindow.h" 
#include "testclass.h" 

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

    MainWindow w; 
    TestClass c; 

    QObject::connect(&w, &MainWindow::mySignal, 
        &c, &TestClass::mySlot); 

    w.show(); 

    return a.exec(); 
} 

Класс MainWindow имеет Q_SIGNAL, который получает испускаемого при нажатии кнопки на от и mySlot только в TestClassQ_SLOT (который наследует QObject), который qDebug sa сообщение.

Мой проект строит отлично, если я построю его с QtCreator, но когда я его построю из командной строки, я получаю странную ошибку.

Что я могу сделать из командной строки:

$ qmake QMAKE_TEST.pro 
$ make 
g++ -c -m64 -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++-64 -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. -o main.o main.cpp 
In file included from main.cpp:4:0: 
mainwindow.h: In function ‘int main(int, char**)’: 
mainwindow.h:19:7: error: ‘void MainWindow::mySignal()’ is protected 
    void mySignal(); 
    ^
main.cpp:14:36: error: within this context 
    QObject::connect(&w, &MainWindow::mySignal, 
            ^
main.cpp:15:41: error: no matching function for call to ‘QObject::connect(MainWindow*, void (MainWindow::*)(), TestClass*, void (TestClass::*)())’ 
        &c, &TestClass::mySlot); 
             ^
main.cpp:15:41: note: candidates are: 
In file included from /usr/include/qt4/QtCore/qcoreapplication.h:45:0, 
       from /usr/include/qt4/QtGui/qapplication.h:45, 
       from /usr/include/qt4/QtGui/QApplication:1, 
       from main.cpp:1: 
/usr/include/qt4/QtCore/qobject.h:204:17: note: static bool QObject::connect(const QObject*, const char*, const QObject*, const char*, Qt::ConnectionType) 
    static bool connect(const QObject *sender, const char *signal, 
       ^
/usr/include/qt4/QtCore/qobject.h:204:17: note: no known conversion for argument 2 from ‘void (MainWindow::*)()’ to ‘const char*’ 
/usr/include/qt4/QtCore/qobject.h:217:17: note: static bool QObject::connect(const QObject*, const QMetaMethod&, const QObject*, const QMetaMethod&, Qt::ConnectionType) 
    static bool connect(const QObject *sender, const QMetaMethod &signal, 
       ^
/usr/include/qt4/QtCore/qobject.h:217:17: note: no known conversion for argument 2 from ‘void (MainWindow::*)()’ to ‘const QMetaMethod&’ 
/usr/include/qt4/QtCore/qobject.h:337:13: note: bool QObject::connect(const QObject*, const char*, const char*, Qt::ConnectionType) const 
inline bool QObject::connect(const QObject *asender, const char *asignal, 
      ^
/usr/include/qt4/QtCore/qobject.h:337:13: note: no known conversion for argument 2 from ‘void (MainWindow::*)()’ to ‘const char*’ 
make: *** [main.o] Error 1 
$ 
$ 

Прежде всего, почему это говорит, что mySignal си protected потому что AFAIK все Q_SIGNALS являются общедоступными? Во-вторых, почему это работает отлично, если я запускаю его с Qt Creator, и я получаю ошибки при запуске из командной строки?

Может ли кто-нибудь помочь мне, пожалуйста?

+1

Одна вещь, которую я вижу твой используете Qt4, который не поддерживает этот тип подключения() – drescherjm

+1

*** Мои проект строит отлично, если я его создаю из QtCreator, но когда я его создаю из командной строки, я получаю странную ошибку. *** Возможно, вы используете Qt5 с QtCreator? – drescherjm

ответ

0

Нашли проблему ... Я строил Qt5.5 проект с qmake версии 4 ...

+1

Хм. Думаю, я должен был обновить до того, как я прокомментировал. По какой-то причине у меня не было такого ответа на моей стороне. – drescherjm

+0

@drescherjm Спасибо большое :) –

 Смежные вопросы

  • Нет связанных вопросов^_^