【问题标题】:Possible: Program executing Qt3 and Qt4 code?可能:执行 Qt3 和 Qt4 代码的程序?
【发布时间】:2010-10-28 22:56:21
【问题描述】:

也许这是一个非常愚蠢的问题,但我希望你能给我一些答案。

我有一个商业应用程序,它使用 Qt3 作为它的 GUI 和一个嵌入式 Python 解释器(命令行)来编写脚本。我想为这个使用 Qt4 的应用程序编写一个自定义插件。该插件主要是一个子类 QMainWindow 类,它与一个 boost python 包装器一起链接到一个 dll 中(所以我在 Windows 上)。 python 包装器应该是我的插件和我的商业应用程序之间的接口。

所以我的问题是:这可能吗?独立于在同一应用程序中运行 Qt4 代码运行 Qt3 代码也是如此。

第一次实验导致应用程序关闭,我将尝试进一步调查...

谢谢!

编辑: 我的应用程序崩溃了,因为我没有创建 QT4 qapplication 实例。因此,当我创建实例时,没有额外的 Qt 命名空间(在答案中建议,因此无需重新编译),一切正常! ;)

【问题讨论】:

    标签: c++ python windows qt boost


    【解决方案1】:

    在奇趣科技论坛上查看this thread。 (实际上这是关于 Qt4 应用程序中的 Qt3 插件,但我怀疑答案大致相同)。

    更新:链接现在无效,但 wayback machine 有它。

    【讨论】:

    • 好吧,我用命名空间“QT4”重新编译了Qt,我证明这个命名空间是通过一个依赖遍历器工具链接到qt dll的。但是像“#define QT_NAMESPACE QT4”这样的命名空间定义从未出现在任何一个 qt 头文件中,所以 QT_NAMESPACE 是未定义的。你对这种行为有答案吗?我在“qglobal.h”的开头手动定义了命名空间,到目前为止它似乎工作......
    • 您现在可能正处于 qt 开发的最前沿。如果他们错过了文件中的命名空间宏,听起来可能值得向 trolltech 提交错误报告。如果该设施被许多人共同使用,我会感到惊讶。
    • 我提交了一份错误报告,他们为此重新打开了一个旧任务:qtsoftware.com/developer/task-tracker/…
    • @timday: 链接被重定向到论坛主页——你能编辑它指向主题吗?谢谢!
    • @ChristianSeverin:啊,不知道如果 Trolltech 在没有更明智的重定向的情况下弄乱了他们的论坛 URL,我会如何再次挖掘它。幸好回程机有文字;链接到那个。
    【解决方案2】:

    这可以通过命名空间 Qt 来实现。来自configure --help;

    -qtnamespace <name>  Wraps all Qt library code in 'namespace <name> {...}'.
    

    理论上,这应该可以防止可能导致您当前方法失败的符号冲突。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多