是否可以在没有 QApplication 的情况下使用 QML 和 QtQuick?

Posted

技术标签:

【中文标题】是否可以在没有 QApplication 的情况下使用 QML 和 QtQuick?【英文标题】:Is it possible to use QML and QtQuick without QApplication? 【发布时间】:2020-10-29 02:45:13 【问题描述】:

我正在寻找一种使用 Qt 编写音频插件的方法。音频插件通常是动态库,而不是应用程序 (http://teragonaudio.com/article/How-to-make-VST-plugins-in-Visual-Studio.html)。搜索时发现音频论坛上有QT etc for vst UI的帖子:

QtQuick/QML 非常适合任何 GUI 开发,包括插件。这 唯一的缺点是有效载荷很大(部署规模)。但 这实际上只是安装尺寸,没有任何影响 表现。有很多方法可以将 QtQuick 场景图注入到 一个窗口,并不是所有的窗口都被绑定或限制 QApplication 假单例。将通用 C++/Boost 粘合到 Qml 简单且线程安全,Qt Quick 场景图本身主要运行在 显卡。

最好避免使用所有的 QApplication 和旧的 Qt 图形框架技术。它们可能对 KDE 和 十年前的嵌入式系统(牙医椅子)。 QML 做到了这一切 过时的。顺便说一句,对于 KDE。

这些说法正确吗? 没有QApplication,如何在 c++ 项目中使用 Qml 和 Qt Quck?我可以在这样的项目中使用qtbase 模块吗?

【问题讨论】:

从事实开始,QQuickItem 是 QObject 的子类,QObject 需要一个事件循环才能正常工作。 QGuiApplication 包含主事件循环,所有来自窗口系统和其他来源的事件都在其中处理和调度。 你应该编写你的插件,以便在它的生命周期中有一个你自己实例化的 QApplication/QGuiApplication 我已经使用 VST SDK 编写插件 aprox。 20年前。请问VST3中主机是如何实例化插件的? @scopchanov 主机应用程序将 VST3 插件加载为动态库,它应该实现一些接口。 @scopchanov 你可以在 JUCE 源文件github.com/juce-framework/JUCE/blob/master/modules/… 中通过查看名称中包含“工厂”的方法来看到它 【参考方案1】:

我阅读了您链接中的所有帖子,我认为作者对他的条款非常宽松。当他说:

最好避免使用所有 QApplication 和旧的 Qt 图形框架技术。

他似乎只是指避免使用 Qt Widget。 docs 说“QApplication 专门为 QGuiApplication 提供了一些基于 QWidget 的应用程序所需的功能。”在另一篇文章中,他指出了一个 QQuickRenderControl 示例,他没有提供指向该示例的链接,但我认为是 this。该示例使用 QML 和 QGuiApplication,而不是 QApplication。

Qt 有为基于 Qt 的应用程序创建插件的示例。如果您想使用 Qt 为非 Qt 应用程序创建插件,那么它可能会起作用,但要准备好将 Qt 库与您的插件一起提供,并且您可能仍然需要 QGuiApplication。我真的没有办法解决这个问题。

【讨论】:

以上是关于是否可以在没有 QApplication 的情况下使用 QML 和 QtQuick?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在没有 QApplication::exec() 的情况下使用 Qt?

PyQT Python 错误 - 无法在没有 QApplication 的情况下创建 QWidget

QApplication:如何在 Ctrl-C 上正常关机

如何在不退出 python 脚本的情况下销毁一个 QApplication 然后运行一个新的?

Qt 必须在 QWidget 之前构造 QApplication

使用 QtSql 真的需要 QApplication