dav*_*ave 10 c++ qt signals-slots qt5 c++17
有什么方法可以防止或不鼓励在仅以Qt5编写的项目中使用来自Qt4 的旧Signal-Slot语法?
在我们当前的项目中,没有出现旧语法,我也没有任何理由支持它们。因此,我们想完全禁用它以防止意外使用。这是可能的,例如通过在中定义某些符号。pro文件?
我知道使用自定义Linter规则应该可以实现,但不幸的是我们还没有集中化规则。
//old way. should throw a compiler error or warning
connect(sender, SIGNAL(sig), receiver, SLOT(slt));
//new way
connect(sender, &Send::sig, receiver, &Rec::slt);
Run Code Online (Sandbox Code Playgroud)
如果您在项目中有一个共享头文件,可以确保将其包含在之后QObject,则可以执行以下操作:
#define SIGNAL(x) static_assert(false, "String-based signal/slot syntax has been disabled in this project")
Run Code Online (Sandbox Code Playgroud)
相同SLOT。
如果您想将其变成警告,请查看此答案。我绝对同意您的观点,基于字符串的语法是一种困扰,不应在uiced文件之外出现。
基于这个答案。
如果每个文件中都包含公共标头,则可以覆盖项目中的 SIGNAL 宏。
确保它在Qt/QObject 包含之后包含。
#undef SIGNAL
#define SIGNAL(x) "",nullptr,""); static_assert(false, "String-based signal/slot syntax has been disabled in this project");
Run Code Online (Sandbox Code Playgroud)
当尝试编译 Qt4 样式的连接语句时,这将显示错误消息。
| 归档时间: |
|
| 查看次数: |
134 次 |
| 最近记录: |