【问题标题】:Does Qt have a C interface?Qt 有 C 接口吗?
【发布时间】:2010-12-16 06:10:04
【问题描述】:

我在网上找到了相互矛盾的答案——有人说有,有人说没有。我也无法在官方 Qt 文档中找到任何详细信息。 Qt 有没有 C 绑定?

【问题讨论】:

    标签: c qt


    【解决方案1】:

    Qt 使用元对象编译器 (MOC) 来使信号和槽神奇地工作(例如,根据用户信号和槽定义进行函数回调)。所以 Qt 并不是真正的 C++,而是真正的 Qt 自己的语法,它很像 C++,但有信号和槽。这使得‘外部“c”’变得无用。

    【讨论】:

      【解决方案2】:

      以前有个叫QtC的Binding,但是搜索发现this thread

      来自理查德·戴尔:

      我曾经维护 Objective-C 和 Qt# 绑定使用的 C 绑定。 但是 Smoke 库要好得多,虽然它不是 C 绑定,而且我 废弃了 QtC 绑定,改为使用烟雾。

      Smoke is here。尽管我记得听说过它们,但我一直无法在任何地方找到明确的 QtC 绑定参考。

      【讨论】:

        【解决方案3】:

        简短回答:不。

        如果您需要一个全面的 C 图形 GUI 工具包,您可以使用 GTK+。

        要使用 Qt,您必须拥有 C++ 编译器。但这并不意味着您的“应用程序逻辑”不能用 C 语言编写,不能用 C 编译器编译并仔细链接到 C++ 部分(带有 Qt 的 GUI)。此应用程序逻辑可以是通用的,可链接到其他可执行文件(纯 C、混合 C/C++ 等)。这完全取决于您的需要。

        不过,Qt 非常适合 C++,这是决定将 C++ 用于特定项目的一个很好的理由,即使您仍希望将部分内容保留在 C 中。

        【讨论】:

          【解决方案4】:

          很遗憾不是,但您可以将您的程序塑造为一组实现业务逻辑的库并用 C 语言编写它们,然后您可以使用一点 C++ 将您编写为库的内容与使用 QT 的 GUI 绑定。

          这也是一个很好的方法,因为以后您可以重用您的库并使用不同的工具包或语言实现许多其他前端!

          【讨论】:

            【解决方案5】:

            你总是可以使用一个简单地将 C++ 转换为 C 的 C++ 编译器,然后调用它生成的错误名称,等等。:-)

            【讨论】:

            • ...坏主意:当您使用不同的编译器时,您可能会发现名称修饰是不同的。或者是否有一个标准来处理?
            • 如果您只是将 C++ 代码 (Qt) “编译”为 C,那么从那时起,您可以将生成的 C 代码视为“源”。除非您返回重新生成它,否则用于生成它的编译器不再相关。话虽如此,这个答案并不打算太认真,但我相信它仍然是一个正确的答案。
            • 为什么要使用混乱的名字?每个合理的 C++ 编译器都应该理解 extern "C" 语句,尤其是当它编译为 C 源代码时。 (顺便说一句,哪个 C++ 编译器可以生成 C 代码?)
            【解决方案6】:

            没有。 Qt 是 C++。但是您可以在任何不交互/创建 GUI 元素的地方编写 C 样式代码,然后使用您选择的 C++ 编译器编译整个代码。

            【讨论】:

              【解决方案7】:

              我认为不会。 Qt 总是被描述为“类库”,它需要 C++ 编译器来构建。您可以尝试编写/找到一个 DLL/接口,该 DLL/接口将围绕 QT 并为 C 层提供 API。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2019-02-16
                • 1970-01-01
                • 2011-07-01
                相关资源
                最近更新 更多