如果我有一个声明Qt信号的类:
class Test
{
signals:
void TestSignal();
}
这在Qt中运行良好。但Resharper C ++给了我警告:
Function 'void Test::TestSignal()' is not implemented
这是正确的,但没有意义,因为Qt不希望实现这个功能。有没有办法实现这个signal
以便Resharper不会抱怨?
我试过了:
class Test
{
signals:
void TestSignal() = {};
}
但得到构建错误:
错误:不是信号声明
答案 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