Вставить виджет GTK в окно Qt

Мне нужно разработать приложение для Windows, Linux и Mac. Чтобы не писать все окна самостоятельно, я решил использовать Qt5 (вместо wxWidgets, потому что последний не содержит предварительно скомпилированных двоичных файлов). У меня есть GTK Widget (от Cef), который мне сейчас нужно встроить, но, к сожалению, понятия не имею, как.

Кажется, там было QX11EmbedContainer в предыдущих версиях Qt, но его больше нет, и я не уверен, что это работает, когда есть переход на Weyland.

2 ответа

Решение

Вы можете попробовать 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);

вы можете использовать класс QX11EmbedContainer на Qt4.

Прошло 7 лет, но я уже сталкивался с этим раньше. Вот что я нашел 1:

Я нашел способ правильно встроить CEF в окно Qt: вставить его в пустой QWindow вместо QWidget. Однако есть некоторые предостережения:

  1. Чтобы добавить окно CEF в макет QWidget, вам нужно будет использовать QWidget::createWindowContainer()

  2. Пустое окно QWindow ничего не отображает - даже фона. Таким образом, вам может потребоваться использовать QBackingStore, чтобы он отображал что-то, когда CEF не встроен - см. Пример Raster Window для некоторой справки.

  3. Возможно, вам потребуется использовать winId из перед добавлением QWindow в макет виджета.

Я настоятельно рекомендую всем, кто все еще пытается это сделать, взглянуть на всю цепочку 1. QtWebkit больше не является приемлемым решением, в то время как CEF - в основном.

Другие вопросы по тегам