【发布时间】:2014-08-29 09:06:50
【问题描述】:
我正在将使用 Embarcadero RAD Studio 构建的 C++ Windows 项目移植到带有 Qt 的 Linux。 所以我的代码中有很多这样的语句:
Menu->Enabled = true;
对于 Qt 应该这样转换:
Menu->setEnabled(true);
所以现在我浪费了很多时间来评论代码。有没有办法自动进行这种替换?
【问题讨论】:
-
好吧,我实际上不会回答你的问题,但过度使用 setter 通常是不好的。如果有一个公共成员,比如这里的 enabled,你不应该为它写一个 setter,除非它做的不仅仅是给它新的值。 (比如检查它是否是一个有效的新值)老实说,setter 可以帮助你调试,所以它很有用,但是对于一个逻辑上的公共成员我不喜欢它。
-
写得好的正则表达式替换是最简单的解决方案。我不建议您使用宏(如果可能的话)。
-
编写一个包装类,为 Qt 提供不同的实现/任何你需要的与 Qt 不兼容的东西。
-
@juanchopanza setEnabled() 由许多基于 QWidget 的 Qt 类所拥有,因此为所有类编写包装器非常繁琐。
-
我会使用编译指令。在 Borland 时代,定义了
__BORLANDC__宏。您可以在与您要根据平台修改的部分相关的代码周围使用#ifded #ifdef __BORLANDC__、#else和#endif子句。我猜 Embarcadero 保留了这个宏或者定义了它的新版本。在我看来,这样的指令在 QT 中有点棘手。谷歌搜索建议使用宏QT_VERSION。