我如何声明 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" 检查。
如果我有一个声明 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" 检查。