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

时间:2017-08-13 02:15:17

标签: c++ qt resharper-c++

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

class Test
{
signals:
    void TestSignal();
}

这在Qt中运行良好。但Resharper C ++给了我警告:

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

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

我试过了:

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

但得到构建错误:

  

错误:不是信号声明

2 个答案:

答案 0 :(得分:1)

正如AcerExtensa所解释的那样,MOC工具生成Qt信号的实现。要使警告静音,您可以将生成的源文件包含在解决方案中,以便ReSharper可以在标头中看到信号的实现。你是对的,虽然这个警告没用,我已经提交https://youtrack.jetbrains.com/issue/RSCPP-20044来对Qt信号的“功能没有实现”进行检查。

答案 1 :(得分:0)

  

Qt不希望实现该功能

这种说法是错误的。 Qt是框架而不是语言。如果您没有定义您的函数,您将从编译器中获得错误。

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

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

#include "yoursourcefilename.moc"

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