禁用 Qt5 代码中的旧(Qt4 样式)信号槽语法



有没有办法防止或阻止在仅用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也一样。

如果您想将其变成警告,请查看此答案。我绝对同意你的观点,基于字符串的语法是一种瘟疫,不应该发生在uiced文件之外。

基于这个答案。

如果每个文件中都包含一个公共标头,则可以覆盖项目中的 SIGNAL 宏。

确保它包含在 Qt/QObject 包含之后

#undef SIGNAL
#define SIGNAL(x) "",nullptr,""); static_assert(false, "String-based signal/slot syntax has been disabled in this project");

这将在尝试编译 Qt4 样式的连接语句时显示错误消息。

相关内容

  • 没有找到相关文章

最新更新