没有预处理步骤,Qt有多可用?

Bil*_*eal 60 c++ qt

我认为库需要使用特殊工具预处理源代码是不合理的.也就是说,有几个人向我推荐了Qt库,用于跨平台GUI开发.

没有预处理步骤,Qt有多可用?

编辑:好的人,我不是把这个问题视为对Qt的抨击 - 太多的Qt粉丝正在对待它,好像它是.我不想讨论Qt提出这个预处理工具的优点.我理解为什么这个工具在那里,我理解为什么Qt设计的大部分都建立在预处理的基础之上.

我从来没有使用过Qt,因此我无法扯掉它.但我宁愿自己写一些少量的样板,而不是依赖于撕掉我的整个构建过程.出于同样的原因,我不会在我当前的项目中使用Flex和Bison; 如果我不使用这些工具,我绝对不会使用其他类型的预处理.

所以,请不要把我当作Qt翻录.我不能评论它有多好或多不好; 我没用过它.我只是想知道是否可以不使用它moc.

Mat*_*gro 26

Qt不需要使用moc来使用它,如果你创建了QObject的子类,它需要使用它,并在你的自定义类中声明信号和槽.

这并非不合理,moc提供了C++没有的功能,信号/插槽,内省等.

因此,要做一些最低级的事情,你将不得不使用moc预处理器.你要么爱它,要么恨它.

  • Boost.Signals2(http://www.boost.org/doc/libs/1_40_0/doc/html/signals2.html)实现了观察者模式,而不必采用像信号/槽这样的特殊预处理.此外,如果您使用预处理器宏从"CObject"派生,MFC会提供内省.我不是建议任何一个实现都优于Qt,只是人们已经管理它而不生成额外的源文件. (26认同)
  • 是否正在创建一个带有选项卡控件,文本框和几个"最低级"按钮的窗口? (4认同)
  • @Praetorian:qts`moc`编译器提供的功能不仅仅是信号/插槽,它是在不能依赖模板的时候编写的,因为所有编译器都不能很好地支持模板 (2认同)

pat*_*tew 6

现在完全可以使用了。moc 的维护者做了一个比普通 Qt 更冗长的语法的替代方案,但它使用标准的 C++14,所以没有额外的步骤。

它被称为“Verdigris”

(顺便说一句,moc 与其说是代码生成器,不如说是真正的预处理步骤。您编写的代码是有效的 C++,而 moc 不会更改其中的任何内容。它只是为您生成额外的 C++ 代码。)

  • 如果你在某处有 `#define slot`,那么预处理器会将它变成简单的 `public`,这正是 Qt 所做的。moc 不会编辑您的任何源文件,它只会创建额外的 `moc_myfile.cpp` 文件。编译使用您编写的确切头文件和 cpp 文件,以及 moc_*.cpp 文件。 (2认同)

Tyl*_*nry 5

我不认为Qt需要一个特殊的预处理工具是不合理的,考虑到它是多么庞大和全面的库.

其他类似的综合库(如Boost和GLib)不需要特殊的预处理工具,但会广泛使用标准C预处理器.Qt本来可以仅使用C预处理器实现,但是通过使用自己的特殊预处理工具,它可以提供更清晰的语法并避免与C预处理器宏相关的许多陷阱.

然而,正如已经回答的那样,你可以在没有moc的情况下使用Qt,而不是任何需要信号和插槽的东西.是的,这包括所有的GUI内容,但Qt绝不仅仅是一个GUI库.

  • -1:那不回答我问的问题.我不是在问Qt的优缺点.我问它是否可以在没有特殊预处理工具的情况下使用. (9认同)
  • 除了已经发布的内容之外,我不确定你还在寻找什么.答案很简单,您可以"有效地使用"不依赖于moc编译或正常运行的Qt部分.这对你来说是否足够取决于你在使用Qt做什么.听起来你正在制作一个GUI,所以你可能无法逃脱避免使用moc. (2认同)