在预先存在的 x 平台项目中使用 Qt?

Posted

技术标签:

【中文标题】在预先存在的 x 平台项目中使用 Qt?【英文标题】:Using Qt in a pre-existing x-platform project? 【发布时间】:2009-12-17 08:07:54 【问题描述】:

我有一个在 Mac、Linux 和 Windows 上运行的现有跨平台项目。

现在,我想为其添加一个“本机”用户界面——显示一些弹出窗口(以请求用户凭据)以及可能是 FileOpen 对话框的能力。原生我的意思是我想在文件打开对话框中使用系统构建 - 所以在 Mac 上显示 mac 文件查找器,在 Windows 上显示 shell 文件打开窗口。

Qt 似乎很合适 - 它的示例表明它可以在所有平台上显示正确的对话框。

但是,所有可用的 Qt 示例都是从最基础的级别开始的 - 假设整个项目都是在 Qt 中开发的。是否可以以更特别的方式初始化和使用 Qt:- 我想将我所有的 Qt UI 代码保存在一个单独的 dll/dylib/so 文件中,并进行一些简单的导出(想想 ShowLoginPopup)。

【问题讨论】:

【参考方案1】:

我认为最简单的方法是反过来——让 Qt GUI 驱动应用程序的其余部分。 Qt 是基于事件的,并且确实依赖于它的事件循环,所以你需要保持它的运行。

【讨论】:

这真的不是一个选择。该应用程序已经有一个事件循环和重构,现在将是一个巨大的皮塔。当组合多个都坚持自己的事件循环的框架时——也许我可以在一个线程上运行 Qt。我不知道即使循环如何在 Windows 以外的操作系统上工作。 @Chris Becke... 如果 Qt 代码的 UI 代码没有在程序的主(第一个)线程上运行,Qt 代码就会感到不安。但是,除此之外,它在线程环境中也能很好地工作。 您的应用正在运行什么事件循环? Qt 与 glib 事件循环兼容。否则,您可以按照 cjhuit 的说法将其穿线。您是否考虑过在两个独立客户端之间使用 XML RPC 或 DBUS 连接的客户端/服务器架构?

以上是关于在预先存在的 x 平台项目中使用 Qt?的主要内容,如果未能解决你的问题,请参考以下文章

Amplify 无法使用 Amplify 识别预先存在的 Vue.js 项目

在 Qt Android 项目中使用 OpenCV 时的链接顺序 [重复]

AngularJS - 如何处理 ng-repeat 与预先存在的项目

Qt Lighthouse学习,就是QPA(Qt Platform Abstraction) 项目的名字

使用 cmake 的跨平台 Qt5 项目

Qt打开现有 Qt 项目 ( 打开已存在的项目 | 运行打开的项目 )