Как мне объявить сигнал Qt, чтобы Resharper не дал мне предупреждение?

Если у меня есть класс, который объявляет сигнал Qt:

class Test
{
signals:
void TestSignal();
}

Это прекрасно работает в Qt. Но Resharper C ++ дает мне предупреждение:

Function 'void Test::TestSignal()' is not implemented

Это правильно, но бессмысленно, поскольку Qt не хочет, чтобы функция была реализована. Есть ли способ реализовать это signal чтобы Решарпер не жаловался?

Я старался:

class Test
{
signals:
void TestSignal() = {};
}

но получите ошибку сборки:

ошибка: не объявление сигнала

1

Решение

Как объяснил AcerExtensa, инструмент MOC генерирует реализации сигналов Qt. Чтобы отключить предупреждение, вы можете включить сгенерированные исходные файлы в ваше решение, чтобы ReSharper видел реализации сигналов в вашем заголовке. Вы правы, хотя это предупреждение бесполезно, я подал https://youtrack.jetbrains.com/issue/RSCPP-20044 чтобы отключить проверку «Функция не реализована» для сигналов Qt.

1

Другие решения

Qt не хочет, чтобы функция была реализована

Это утверждение неверно. Qt — это Framework, а не Language. Если вы не определите свою функцию, вы получите ошибку от компилятора.

Qt имеет инструмент под названием MOC (Meta Object Compiler). MOC является генератором кода. Он анализирует заголовочные файлы и генерирует дополнительный файл C ++, который компилируется с остальной частью программы. Этот сгенерированный файл C ++ содержит всю информацию, необходимую для самоанализа (механизм сигналов / слотов).

Таким образом, чтобы ваш код работал, вам нужно в первую очередь включить Q_OBJECT Def в вашем классе, и ваш класс должен наследовать от QObject или один из его подклассов (например, QWidget) так что Qt может использовать его QMetaObject«S. Если ваш компилятор или лучше сказать, что ваш DevEnv не знает, как генерировать файлы moc, вам нужно сделать это самостоятельно, а затем включить moc файл в исходном дереве вашего проекта или включить его непосредственно в конец исходного файла, например:

#include "yoursourcefilename.moc"

Вы можете прочитать больше о системе Qt Meta Object здесь: Метаобъектная система

0

По вопросам рекламы [email protected]