将GTK Widget嵌入到Qt窗口中

时间:2013-06-04 13:46:19

标签: gtk qt5 chromium-embedded qx11embedcontainer

我需要为 Windows Linux Mac 开发一个应用程序。为了不必自己编写所有窗口,我选择使用 Qt5 (在 wxWidgets 上,因为后者没有预编译的二进制文件)。我有一个 GTK 小部件(Cef),我现在需要嵌入它,但遗憾的是不知道怎么做。

在先前版本的 Qt 中似乎有QX11EmbedContainer,但它不再存在,而且当我切换到时我也不确定这是否有效韦兰

3 个答案:

答案 0 :(得分:2)

如果您只需要一个嵌入式浏览器,可以试用QT WebKit

http://qt-project.org/doc/qt-5.0/qtwebkit/qtwebkit-index.html

答案 1 :(得分:0)

    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类。

答案 2 :(得分:0)

已经7年了,但是我之前已经处理过。这是我发现的1

我找到了一种在Ct窗口中正确嵌入CEF的方法:将其嵌入在空的QWindow而不是QWidget中。但是,有一些注意事项:

  1. 要将CEF窗口添加到QWidget布局中,您将需要使用QWidget :: createWindowContainer()

  2. 一个空的QWindow不会渲染任何内容-甚至都不是背景。因此,您可能需要使用QBackingStore使其在未嵌入CEF时呈现某些内容-有关参考,请参见“栅格窗口”示例。

  3. 在将QWindow添加到小部件的布局中之前,您可能需要使用winId。

我强烈建议仍然尝试这样做的人来研究整个线程1。 QtWebkit不再是一种可以接受的解决方案,而CEF非常适合。