我需要为Windows、Linux和Mac开发一个应用程序。为了不必自己编写所有的窗口杂物,我选择使用Qt5(通过wxWidgets,因为后者不提供预编译的二进制文件)。我有一个GTK Widget (of Cef ),我现在需要嵌入它,但遗憾的是不知道如何嵌入。
QX11EmbedContainer
以前版本的Qt似乎有,但它不再存在,而且我不确定这是否有效,当切换到Weyland时。
我需要为Windows、Linux和Mac开发一个应用程序。为了不必自己编写所有的窗口杂物,我选择使用Qt5(通过wxWidgets,因为后者不提供预编译的二进制文件)。我有一个GTK Widget (of Cef ),我现在需要嵌入它,但遗憾的是不知道如何嵌入。
QX11EmbedContainer
以前版本的Qt似乎有,但它不再存在,而且我不确定这是否有效,当切换到Weyland时。
如果你只需要一个嵌入式浏览器,你可以试试 QT WebKit
http://qt-project.org/doc/qt-5.0/qtwebkit/qtwebkit-index.html
QMainWindow* main_window = new QMainWindow;
QX11EmbedContainer* container = new QX11EmbedContainer;
main_window->setCentralWidget(container);
//gtk code
GtkWidget* window;
GtkWidget* button;
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
button = gtk_button_new ();
gtk_widget_show (button);
gtk_container_add (GTK_CONTAINER (window), button);
gtk_widget_show(window);
XID id = GDK_WINDOW_XWINDOW (GTK_WIDGET(window)->window);
container->embedClient(id);
您可以在 Qt4 上使用 QX11EmbedContainer 类。
已经7年了,但我以前处理过这个问题。这是我发现的1:
我找到了一种将 CEF 正确嵌入到 Qt 窗口中的方法:将其嵌入到空的 QWindow 而不是 QWidget 中。不过,有一些警告:
要将 CEF 窗口添加到 QWidget 布局中,您需要使用 QWidget::createWindowContainer()
一个空的 QWindow 不会渲染任何东西——甚至不是背景。因此,您可能需要使用 QBackingStore 使其在未嵌入 CEF 时呈现某些内容——请参阅光栅窗口示例以获取一些参考。
在将 QWindow 添加到小部件的布局之前,您可能需要使用 winId。
我强烈建议仍在尝试此操作的任何人查看整个线程1。QtWebkit 不再是一个可以接受的解决方案,而 CEF 确实是。