#cpp #qt #qt5
Начал изучать Qt по книге М.Шлее и дошёл до сигналов и слотов, сам механизм понятен. Попробовал написать простой класс реализующий этот механизм, но Qt Creator выводит похожие ошибки .../Error in " Util.asciify("build-...-Debug")":-1: error: TypeError: Property 'asciify' of object Core::Internal::UtilsJsExtension(0x155bb00) is not a function/.../tests.cpp:19: undefined reference to `SS_Primer::introduce_yourself()' Класс компилируется class SS_primer : public QObject { Q_OBJECT public: void send_signal() { emit introduce_yourself(); } public slots: void show_name() { std::cout << "I'm a slot" << std::endl; } signals: void introduce_yourself(); }; А этот код не хочет( bool Test::SignalSlot() { SS_primer primer; QObject::connect( &primer, SIGNAL(introduce_yourself()), &primer, SLOT(show_name()) ); primer.send_signal(); return true; } Пробовал создавать объект класса через new, делал send_signal() static функцией принимающей указатель.
Ответы
Ответ 1
Вангую: Вы сделали все это дело в одном файле, не так ли? Вам следовало повнимательнее почитать Шлее, иначе бы Вы были бы вкурсе, что такое и, главное, как работает метакомпилятор. Короче разнести объявление и реализацию как положено и все заработает. PS Эти ошибки выводит не мифический Qt, а линкер - он вам прямо говорит, что не может найти ваш сигнал. Его действительно нет - можете даже создать динамическую библиотеку и проверить nm-ом. Это из-за того, что moc не отработал. PSS используйте новый синтаксис сигналов-слотов - он гораздо удобнее (за исключением перегруженный слотов) и при ошибках, связанных с неправильным подключением, вы получите больше корректной информации.
Комментариев нет:
Отправить комментарий