Реализация сигналов и слотов в своём классе

86
20 марта 2021, 20:10

Начал изучать 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 функцией принимающей указатель.

Answer 1

Вангую: Вы сделали все это дело в одном файле, не так ли? Вам следовало повнимательнее почитать Шлее, иначе бы Вы были бы вкурсе, что такое и, главное, как работает метакомпилятор. Короче разнести объявление и реализацию как положено и все заработает.

PS Эти ошибки выводит не мифический Qt, а линкер - он вам прямо говорит, что не может найти ваш сигнал. Его действительно нет - можете даже создать динамическую библиотеку и проверить nm-ом. Это из-за того, что moc не отработал.

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

READ ALSO
Вычесть из строки подстроку

Вычесть из строки подстроку

Есть строка QString DDF1 с n элементами (устройства USB)

84
Как сохранить размер и расположение по центру дочернего изображения при динамически изменяющейся ширине колонки родителя

Как сохранить размер и расположение по центру дочернего изображения при динамически изменяющейся ширине колонки родителя

Вопрос инициирован ответом в топике: Как я могу управлять применением z-index? Hover отменяет z-index до завершения transitions

133
Фильтровать select

Фильтровать select

Есть два select элемента первый это марка авто, второе это модель авто

145