有没有办法防止或阻止在仅用Qt5编写的项目中使用Qt4中的旧信号槽语法?
在我们当前的项目中,没有旧语法的出现,我也看不出有任何理由支持它们。因此,我们希望完全禁用它以防止意外使用。这是否可能,例如通过在 .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);
如果项目中有一个共享头文件,您可以确保在QObject
之后包含该文件,则可以执行以下操作:
#define SIGNAL(x) static_assert(false, "String-based signal/slot syntax has been disabled in this project")
SLOT
也一样。
如果您想将其变成警告,请查看此答案。我绝对同意你的观点,基于字符串的语法是一种瘟疫,不应该发生在uic
ed文件之外。
基于这个答案。
如果每个文件中都包含一个公共标头,则可以覆盖项目中的 SIGNAL 宏。
确保它包含在 Qt/QObject 包含之后。
#undef SIGNAL
#define SIGNAL(x) "",nullptr,""); static_assert(false, "String-based signal/slot syntax has been disabled in this project");
这将在尝试编译 Qt4 样式的连接语句时显示错误消息。