一个libcef与Qt集成的障碍以及解决方法

说简单点好了,现在很多桌面程序使用一个C++编写的本地程序内嵌libcef的方式实现GUI,一般来说这种情况下是不需要使用Qt的,但是特殊情况下,比如既有代码有Qt实现的时候,就需要把libcef和Qt集成在一起。

大部分情况下这个很简单,直接将QWidget的handle设置为CefBrowser的父窗口,再将libcef的message loop设置到另一个线程中即可。但是有一种情况,即web内有一个由Qt实现的npapi插件,而libcef使用单进程模型时,就会产生问题——QWidget只能和qApp处于同一个线程内,而web内的插件此时是在另一个线程中创建的。

解决方法是不要将libcef的message loop放到子线程里,而是在Qt的消息循环中设置一个定时器,每次定时器的回调中处理一个libcef的消息。

实测有效。

你可能感兴趣的:(qt,libcef)