2 votes

Intégrer un widget GTK dans une fenêtre Qt

Je dois développer une application pour Fenêtres , Linux y Mac . Pour ne pas avoir à écrire moi-même tous les éléments de la fenêtre, j'ai choisi d'utiliser Qt5 (plus de wxWidgets car ce dernier ne contient pas de binaires précompilés). J'ai un GTK Widget (de Cef ) que je dois maintenant intégrer, mais je n'ai malheureusement aucune idée de la manière de le faire.

Il semble qu'il y ait eu QX11EmbedContainer dans les versions précédentes de Qt Mais il n'est plus présent et je ne suis pas sûr que cela fonctionne, lorsqu'il y a un commutateur à Weyland .

1voto

gariel Points 418

Vous pouvez essayer QT WebKit si vous n'avez besoin que d'un navigateur embarqué.

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

0voto

cryfeifei Points 1
    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);

vous pouvez utiliser la classe QX11EmbedContainer sur Qt4.

0voto

Romário Points 733

Cela fait 7 ans, mais j'ai déjà eu affaire à ce genre de situation. Voici ce que j'ai trouvé 1 :

J'ai trouvé un moyen d'intégrer correctement le CEF dans une fenêtre Qt : l'intégrer dans une QWindow vide au lieu d'un QWidget. Il y a cependant quelques mises en garde :

  1. Pour ajouter la fenêtre CEF à une présentation QWidget, vous devez utiliser QWidget::createWindowContainer()

  2. Une QWindow vide ne rend rien -- pas même un arrière-plan. Vous devrez donc peut-être utiliser un QBackingStore pour qu'il rende quelque chose lorsque le CEF n'est pas intégré -- voir l'exemple de la fenêtre Raster pour plus de détails.

  3. Il se peut que vous deviez utiliser le winId avant d'ajouter la QWindow à la disposition de votre widget.

Je recommande vivement à tous ceux qui essaient encore de le faire de jeter un coup d'œil à l'ensemble du fil de discussion. 1 . QtWebkit n'est plus une solution acceptable, alors que CEF l'est en grande partie.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X