在任何 C++ 项目中重用 QtCore 模块

Posted

技术标签:

【中文标题】在任何 C++ 项目中重用 QtCore 模块【英文标题】:Reusing QtCore module in any C++ project 【发布时间】:2011-11-02 12:03:43 【问题描述】:

我对重用元对象系统和一般功能非常​​感兴趣,但不知道具体:

QMetaObject::invokeMethod() 是否依赖于事件循环? 我可以在没有 QCoreApplication 实例的情况下加载插件吗? ...

非常感谢在非 qt 应用程序/非主线程中使用此模块的一些限制列表。

更新:

我已将same question 发布到 Qt 社区。​​p>

【问题讨论】:

【参考方案1】:

正在运行的事件循环是可选的,并且是每个线程的。如果您不在给定线程中处理事件,则它不需要一个。

invokeMethod 不依赖于事件循环,如果您在调用此方法的线程中的对象上调用方法。如果您在其他线程中的对象上调用方法,则所述线程将需要运行事件循环,即使只是定期运行。毕竟,他们可以在明确定义的地点致电processEvents。跨线程槽调用相当于将一个事件发布到线程的事件队列中。

我会检查插件机制是否在没有QCoreApplication 实例的情况下工作,但这个实例不会对你造成任何伤害。只需创建它并忘记它。您不需要在主线程或任何线程中运行事件循环。

请注意QPluginLoaderQLibrary 不同,您需要检查您的需求并确定您想要的。

一个非gui的QCoreApplicationcan be created in an arbitrary thread,它的事件循环可以在那里运行。在 Windows 上,QApplication 也可以在任意线程中创建。

【讨论】:

以上是关于在任何 C++ 项目中重用 QtCore 模块的主要内容,如果未能解决你的问题,请参考以下文章

如何在多模块 Maven 项目中自动重用依赖版本?

模块qtcore.dll已经加载,但找不到入口点怎么解决

如何编写可重用的组件/模块?

C++ 软件工程中的继承

模块窗口中缺少一些 DLL

Angular2 无法使用延迟模块加载的自定义重用策略