Поиск использования сигналов в Qt Creator

В Qt Creator можно встать курсором на переменную или функцию, вызвать контекстное меню и выбрать «Найти использование».

Qt Creator найти использование

Тогда Qt Creator найдет все места, где используется эта переменная или функция.

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

connect(
    object1,
    SIGNAL(superSignal()),
    object2,
    SLOT(superSlot())
);

Qt Creator просто не будет ничего искать, если вы попробуете сделать это на функции, которая заключена в SIGNAL().

Кроме того, Qt Creator не найден подключения сигнала если вы попытаетесь поискать в блоке signals в классе.

class SuperClass
{
...
signals:
    superSignal();
}

В этому случае Qt Creator найдет только испускания сигнала (emit).

Решение есть — использовать современный способ подключения сигналов и слотов, без макросов SIGNAL() и SLOT().


connect(
    obj1,
    &SuperClass1::superSignal,
    obj2,
    &SuperClass2::superSlot
);

Данный синтаксис был введен в Qt 5.0 в 2012 году.

Официальное описание сигналов и слотов в Qt на английском.

Реклама

Ошибка линковки при наследовании QObject

Захотел добавить в свой существующий класс поддержку сигналов и слотов. Сделал все как положено, унаследовал QObject, вызвал макрос Q_OBJECT:

class MyClass: public QObject
{
    Q_OBJECT

public:
    MyClass() {};
    virtual ~MyClass() {};
};

Но при сборке получил ошибку линковщика:

ошибка: undefined reference to `vtable for MyClass’

При сборке не вызывалась программа moc для файла, который содержал этот класс.

Проблема решилась вызовом qmake с помощью меню «Сборка -> Запустить qmake» в QtCreator.