Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Qt+Cef integration on Linux
Forum Updated to NodeBB v4.3 + New Features

Qt+Cef integration on Linux

Scheduled Pinned Locked Moved Solved General and Desktop
21 Posts 5 Posters 11.1k Views 3 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • A Offline
    A Offline
    antofik
    wrote on last edited by
    #12

    Actually, I've managed to make it work.
    Just in case, if someone will need it in future:

      GtkWidget* gtkWin = gtk_window_new(GTK_WINDOW_TOPLEVEL);
      GtkWidget* parentView = gtk_vbox_new(FALSE, 0);
      GtkContainer* container = (GTK_CONTAINER(gtkWin));
      gtk_container_add(container, parentView);
      gtk_window_set_position(GTK_WINDOW(gtkWin), GTK_WIN_POS_CENTER);
      gtk_widget_show_all(GTK_WIDGET(gtkWin));
    
      GdkWindow* w = gtk_widget_get_window(parentView);
      XID t = gdk_x11_drawable_get_xid(w);
    
      WId wid = (WId) t;
      QWindow* win = QWindow::fromWinId(wid);
      setLayout(new QGridLayout());
      QWidget* widget = QWidget::createWindowContainer(win);
      this->layout()->addWidget(widget);
    
      info.SetAsChild(parentView);
    

    Basically, I've created my own GTK window, passed the reference on this window to CEF, and placed it into Qt widget using QWindow::fromWinId().

    T 1 Reply Last reply
    1
    • mrjjM Offline
      mrjjM Offline
      mrjj
      Lifetime Qt Champion
      wrote on last edited by
      #13

      So would it be fair to conclude that it really
      wants a gtk windows handle and not what ever comes out of
      winId() ?

      A 1 Reply Last reply
      0
      • mrjjM mrjj

        So would it be fair to conclude that it really
        wants a gtk windows handle and not what ever comes out of
        winId() ?

        A Offline
        A Offline
        antofik
        wrote on last edited by
        #14

        Yes @mrjj, Cef is built on Gtk2, so it requires gtk handle, not the winId().

        Anyhow, it is possible to integrate Cef with Qt on linux, and that is what matters :-)

        1 Reply Last reply
        0
        • G Offline
          G Offline
          gepgep
          wrote on last edited by
          #15

          is there somewhere a more complete example of mixing qt/gtk/cef?

          mrjjM 1 Reply Last reply
          0
          • G gepgep

            is there somewhere a more complete example of mixing qt/gtk/cef?

            mrjjM Offline
            mrjjM Offline
            mrjj
            Lifetime Qt Champion
            wrote on last edited by
            #16

            @gepgep
            Not that i have stumbled upon.
            Have you asked on the forum ?
            http://magpcss.org/ceforum/

            You cannot use http://doc.qt.io/qt-5/qtwebengine-index.html
            or webkit ?

            G 1 Reply Last reply
            0
            • mrjjM mrjj

              @gepgep
              Not that i have stumbled upon.
              Have you asked on the forum ?
              http://magpcss.org/ceforum/

              You cannot use http://doc.qt.io/qt-5/qtwebengine-index.html
              or webkit ?

              G Offline
              G Offline
              gepgep
              wrote on last edited by
              #17

              @mrjj i am wondering if it can be done with cef due to (my) project restrictions ..
              I have found several git repos with qt+cef, but only for windows. Also i managed to combine gtk with cef successfully, but i cant find anything about qt+cef@linux (maybe because qt+gtk is not a happy combination?). The code snippet from @antofik does not build (gtkwidget with qwidget is it even possible) or i am missing something?

              mrjjM 1 Reply Last reply
              0
              • G gepgep

                @mrjj i am wondering if it can be done with cef due to (my) project restrictions ..
                I have found several git repos with qt+cef, but only for windows. Also i managed to combine gtk with cef successfully, but i cant find anything about qt+cef@linux (maybe because qt+gtk is not a happy combination?). The code snippet from @antofik does not build (gtkwidget with qwidget is it even possible) or i am missing something?

                mrjjM Offline
                mrjjM Offline
                mrjj
                Lifetime Qt Champion
                wrote on last edited by
                #18

                @gepgep
                Well mixing Gtk and Qt is pretty rare use case as far as I know. Both being Widgets libraries.
                And there is always the issue of the event loop.
                So as far as integration it will not be funny.

                @antofik sample wraps a gtk window using native Gtk calls +Qt and is apparently supported by
                createWindowContainer so in this case it works.

                I have not seen much info about this. sorry.

                G 1 Reply Last reply
                1
                • mrjjM mrjj

                  @gepgep
                  Well mixing Gtk and Qt is pretty rare use case as far as I know. Both being Widgets libraries.
                  And there is always the issue of the event loop.
                  So as far as integration it will not be funny.

                  @antofik sample wraps a gtk window using native Gtk calls +Qt and is apparently supported by
                  createWindowContainer so in this case it works.

                  I have not seen much info about this. sorry.

                  G Offline
                  G Offline
                  gepgep
                  wrote on last edited by
                  #19

                  @mrjj thanks for your time+replies

                  mrjjM 1 Reply Last reply
                  0
                  • G gepgep

                    @mrjj thanks for your time+replies

                    mrjjM Offline
                    mrjjM Offline
                    mrjj
                    Lifetime Qt Champion
                    wrote on last edited by
                    #20

                    @gepgep
                    Hi
                    Just as a note.
                    Webkit been revived
                    https://forum.qt.io/topic/76739/webkit-status-2017

                    So you might be able to use that?

                    1 Reply Last reply
                    1
                    • A antofik

                      Actually, I've managed to make it work.
                      Just in case, if someone will need it in future:

                        GtkWidget* gtkWin = gtk_window_new(GTK_WINDOW_TOPLEVEL);
                        GtkWidget* parentView = gtk_vbox_new(FALSE, 0);
                        GtkContainer* container = (GTK_CONTAINER(gtkWin));
                        gtk_container_add(container, parentView);
                        gtk_window_set_position(GTK_WINDOW(gtkWin), GTK_WIN_POS_CENTER);
                        gtk_widget_show_all(GTK_WIDGET(gtkWin));
                      
                        GdkWindow* w = gtk_widget_get_window(parentView);
                        XID t = gdk_x11_drawable_get_xid(w);
                      
                        WId wid = (WId) t;
                        QWindow* win = QWindow::fromWinId(wid);
                        setLayout(new QGridLayout());
                        QWidget* widget = QWidget::createWindowContainer(win);
                        this->layout()->addWidget(widget);
                      
                        info.SetAsChild(parentView);
                      

                      Basically, I've created my own GTK window, passed the reference on this window to CEF, and placed it into Qt widget using QWindow::fromWinId().

                      T Offline
                      T Offline
                      Tomato Page
                      wrote on last edited by
                      #21

                      @antofik
                      Dear antofix,
                      Could you send me a complete example. I'm try the method but still not working with qt 5.5

                      thanks

                      1 Reply Last reply
                      0

                      • Login

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Categories
                      • Recent
                      • Tags
                      • Popular
                      • Users
                      • Groups
                      • Search
                      • Get Qt Extensions
                      • Unsolved