2

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

QX11EmbedContainer以前版本的Qt似乎有,但它不再存在,而且我不确定这是否有效,当切换到Weyland时。

4

3 回答 3

1

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

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

于 2013-06-04T13:57:37.673 回答
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 类。

于 2018-11-06T01:12:17.270 回答
0

已经7年了,但我以前处理过这个问题。这是我发现的1

我找到了一种将 CEF 正确嵌入到 Qt 窗口中的方法:将其嵌入到空的 QWindow 而不是 QWidget 中。不过,有一些警告:

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

  2. 一个空的 QWindow 不会渲染任何东西——甚至不是背景。因此,您可能需要使用 QBackingStore 使其在未嵌入 CEF 时呈现某些内容——请参阅光栅窗口示例以获取一些参考。

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

我强烈建议仍在尝试此操作的任何人查看整个线程1。QtWebkit 不再是一个可以接受的解决方案,而 CEF 确实是。

于 2020-07-28T21:06:35.503 回答