在 Qt6 应用程序中使用预编译的 Qt5 库
Posted
技术标签:
【中文标题】在 Qt6 应用程序中使用预编译的 Qt5 库【英文标题】:Using pre-compiled Qt5 library in a Qt6 application 【发布时间】:2021-10-29 14:38:56 【问题描述】:我是 库 的新手,并且正在使用第 3 方代码。我想问简单的问题有什么方法可以使用预编译并与 Qt5 完全兼容的库并按原样使用它无需进行任何更改尽管底层 Qt API 已更改,但 Qt6 应用程序中的强>(即修复问题/错误或重新编译)。
如果有办法,实际过程应该是什么?
我使用的库是:JKQTPlotter
【问题讨论】:
我对此表示怀疑; Qt6 甚至与 Qt5 的源代码都不兼容,因此它与二进制兼容的可能性几乎为零。我认为您需要在 Qt6 下重新编译库(并且可能需要对库的源代码进行一些调整才能使其在 Qt6 下编译) 我可以在 1 个应用程序中同时使用 qt5 和 qt6 否;它们都在同一个命名空间中声明了相同的类和函数名,所以如果你尝试它,你会从链接器中得到重复的符号错误。 【参考方案1】:当然,您可以在任何应用程序中使用该库:该库本身需要 Qt 5。您的应用程序不需要。
那么您需要在 Qt 6 应用程序和 Qt 5 库之间建立一个非 Qt 桥梁。
您可以创建一个动态库,以某种不可知的方式公开 JKQTPlotter 的功能,而无需在界面本身中使用 Qt。例如,您可以将绘图渲染到Qt5::QImage
,然后让桥将它们暴露给您的 Qt 6 应用程序,您将在其中创建一个不拥有位图的包装器 Qt6::QImage
,因此不会复制并且是因此“免费”。
将 JKQTPlotter 移植到 Qt 6 是一项微不足道的任务,所以最好只是移植它:)
【讨论】:
...以及用户如何与 QImage 交互???以上是关于在 Qt6 应用程序中使用预编译的 Qt5 库的主要内容,如果未能解决你的问题,请参考以下文章