c – 使用动态插件处理Qt5中的QMetaType注册
我的公司正在考虑从Qt 4.8.4跳到Qt 5.4,但是我遇到了一个可能对我们来说是一个改变的变化:QMetaType :: unregisterType()被删除(
http://doc.qt.io/qt-5/sourcebreaks.html).
我们的GUI需要在运行时加载插件,在GUI会话期间可能会多次加载和卸载相同的插件.在Qt 4中,我们遇到了一个问题,当第二次加载插件时,任何使用插件注册的自定义类型的信号/插槽都会导致访问冲突,因为元类型已经注册了插件的第一个实例(现在已卸载,因此内存空间无效).我们通过定义我们自己的宏来解决这个问题,以便在加载和卸载插件时安全地注册和取消注册元类型. 由于QMetaType :: unregisterType()不再存在,我担心这个问题会回来,没有真正解决问题的方法.升级到Qt 5.4将是一个重要的投资,甚至可以测试我可以测试这个问题,所以我希望我能从这里的专家那里得到一些指示. 有没有办法在Qt 5中取消注册元类型?如果没有,Qt 5现在是否有某种系统可以检测DLL何时被卸载并取消注册元类型本身(我不太可能认为)?或者,如果我们切换到新的Qt 5信号/插槽语法,这是否完全免除了我们对元类型的需求?如果是这样,新语法是否仍允许排队连接?请原谅我对这个问题的无知,但我没有看到它明确列为支持或不支持. 解决方法
目前这是不受支持的,这意味着在写这篇文章时不要用Qt 5卸载插件.通常,您无论如何都不会加载和卸载插件,因为它通常在启动期间完成.存储库中的corresponding change还声称:
因此,即使您认为它正在工作,它也是不可靠的,这意味着您可能已经观察到难以发现其操作中的错误,从而导致您不可靠的软件.我相信你不想发布这样的软件,特别是如果Qt项目不推荐使用它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |