在Qt窗口中嵌入GTK小部件



我需要为WindowsLinuxMac开发一个应用程序。为了不必自己编写所有的窗口程序,我选择使用Qt5(而不是wxWidgets,因为后者没有附带预编译的二进制文件)。我有一个GTK Widget (of Cef),我现在需要嵌入,但遗憾的是不知道如何。

似乎在以前的Qt版本中有QX11EmbedContainer,但它不再存在,而且我也不确定这是否有效,当切换到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。不过有一些注意事项:

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

  2. 一个空的QWindow不渲染任何东西——甚至没有背景。因此,您可能需要使用QBackingStore来使它在没有嵌入CEF的情况下渲染一些东西——参见栅格窗口示例以获得一些参考。

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

我强烈建议那些还在尝试的人看看整个线程。QtWebkit不再是一个可接受的解决方案,而CEF则是。

相关内容

  • 没有找到相关文章

最新更新