在任何 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
实例的情况下工作,但这个实例不会对你造成任何伤害。只需创建它并忘记它。您不需要在主线程或任何线程中运行事件循环。
请注意QPluginLoader
与QLibrary
不同,您需要检查您的需求并确定您想要的。
一个非gui的QCoreApplication
can be created in an arbitrary thread,它的事件循环可以在那里运行。在 Windows 上,QApplication
也可以在任意线程中创建。
【讨论】:
以上是关于在任何 C++ 项目中重用 QtCore 模块的主要内容,如果未能解决你的问题,请参考以下文章