1

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

class Test
{
signals:
    void TestSignal();
}

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

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

这是正确的但毫无意义,因为 Qt 不希望实现该功能。有没有办法实现这signal一点,这样 Resharper 就不会抱怨?

我试过了:

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

但得到构建错误:

错误:不是信号声明

4

2 回答 2

1

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

于 2017-08-14T11:54:25.127 回答
0

Qt 不希望实现该功能

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

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

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

#include "yoursourcefilename.moc"

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

于 2017-08-14T10:42:25.790 回答