我如何声明 Qt 信号以便 Resharper 不给我警告?

How do I declare a Qt signal so Resharper doesn't give me a warning?

如果我有一个声明 Qt 信号的 class:

class Test
{
signals:
    void TestSignal();
}

这在 Qt 中工作正常。但是 Resharper C++ 给了我警告:

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

这是正确的,但没有意义,因为 Qt 不希望实现该功能。有什么方法可以实现这个 signal 以便 Resharper 不会抱怨?

我试过了:

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

但出现构建错误:

error : Not a signal declaration

Qt doesn't want the function to be implemented

这个说法是错误的。 Qt 是框架而不是语言。如果你不定义你的函数,你会从编译器中得到错误。

Qt 有一个名为 MOC(元对象编译器)的工具。 MOC 是一个代码生成器。它解析头文件并生成一个额外的 C++ 文件,该文件与程序的其余部分一起编译。生成的 C++ 文件包含内省所需的所有信息(signals/slots 机制)。

因此,为了使您的代码正常工作,您首先需要在 class 中包含 Q_OBJECT def,并且您的 class 应该继承自 QObject 或其子项之一classes(例如,QWidget)所以 Qt 可以使用它 QMetaObject 的。如果你的编译器或者更确切地说你的 DevEnv 不知道如何生成 moc 的文件,你需要自己做,然后将 moc 文件包含在你的项目源代码树中,或者直接将它包含在你的源文件的末尾,比如:

#include "yoursourcefilename.moc"

您可以在此处阅读有关 Qt 元对象系统的更多信息:The Meta-Object System

正如 AcerExtensa 所解释的,MOC 工具生成 Qt 信号的实现。要消除警告,您可以将生成的源文件包含到您的解决方案中,以便 ReSharper 可以在您的 header 中看到信号的实现。你是对的,尽管这个警告是无用的,我已经提交 https://youtrack.jetbrains.com/issue/RSCPP-20044 来停止对 Qt 信号的 "Function is not implemented" 检查。