#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 используйте новый синтаксис сигналов-слотов - он гораздо удобнее (за исключением перегруженный слотов) и при ошибках, связанных с неправильным подключением, вы получите больше корректной информации.
Комментариев нет:
Отправить комментарий