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. Starting an application and view its GUI inside QWidget (Linux)
Forum Updated to NodeBB v4.3 + New Features

Starting an application and view its GUI inside QWidget (Linux)

Scheduled Pinned Locked Moved Unsolved General and Desktop
15 Posts 4 Posters 2.2k Views 2 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.
  • B Offline
    B Offline
    belal
    wrote on 6 Apr 2022, 14:13 last edited by
    #1

    How to create a C++ application that runs on Linux that can execute processes given their paths and view the GUI of these processes inside the Qt application (Qwidget) as tabs.

    Belal Hamdy,
    Software Development Engineer.

    J 1 Reply Last reply 6 Apr 2022, 14:17
    0
    • B belal
      6 Apr 2022, 14:13

      How to create a C++ application that runs on Linux that can execute processes given their paths and view the GUI of these processes inside the Qt application (Qwidget) as tabs.

      J Offline
      J Offline
      JonB
      wrote on 6 Apr 2022, 14:17 last edited by JonB 4 Jun 2022, 14:18
      #2

      @belal said in Starting an application and view its GUI inside QWidget (Linux):

      that can execute processes given their paths

      That's easy: QProcess.

      and view the GUI of these processes inside the Qt application (Qwidget) as tabs

      What "GUI" do these unspecified processes have under Linux?

      B 1 Reply Last reply 10 Apr 2022, 08:51
      0
      • K Offline
        K Offline
        Kent-Dorfman
        wrote on 6 Apr 2022, 16:16 last edited by
        #3

        rfb protocol. remote-frame-buffer.

        B 1 Reply Last reply 10 Apr 2022, 09:04
        0
        • J JonB
          6 Apr 2022, 14:17

          @belal said in Starting an application and view its GUI inside QWidget (Linux):

          that can execute processes given their paths

          That's easy: QProcess.

          and view the GUI of these processes inside the Qt application (Qwidget) as tabs

          What "GUI" do these unspecified processes have under Linux?

          B Offline
          B Offline
          belal
          wrote on 10 Apr 2022, 08:51 last edited by
          #4

          @JonB Thanks very much for your help. The GUI of the processes like genome-calculator or FireFox

          Belal Hamdy,
          Software Development Engineer.

          J 1 Reply Last reply 10 Apr 2022, 09:28
          0
          • K Kent-Dorfman
            6 Apr 2022, 16:16

            rfb protocol. remote-frame-buffer.

            B Offline
            B Offline
            belal
            wrote on 10 Apr 2022, 09:04 last edited by
            #5

            @Kent-Dorfman
            Thanks for the hint.

            Belal Hamdy,
            Software Development Engineer.

            1 Reply Last reply
            0
            • B belal
              10 Apr 2022, 08:51

              @JonB Thanks very much for your help. The GUI of the processes like genome-calculator or FireFox

              J Offline
              J Offline
              JonB
              wrote on 10 Apr 2022, 09:28 last edited by
              #6

              @belal
              You can run these via QProcess from your Qt application. They will open their own windows as they normally do.

              Firefox is a web browser. Qt offers the chromium embedded into a widget via QWebEngine, giving you a Chrome-like browser window if you would accept that instead of Firefox.

              If you can do any embedding of external windows have a look at e.g. https://stackoverflow.com/questions/33699258/qt-5-5-embed-external-application-into-qwidget, https://stackoverflow.com/questions/52608457/qt-5-11-embed-external-application-into-qwidget, etc.

              B 2 Replies Last reply 10 Apr 2022, 09:34
              1
              • J JonB
                10 Apr 2022, 09:28

                @belal
                You can run these via QProcess from your Qt application. They will open their own windows as they normally do.

                Firefox is a web browser. Qt offers the chromium embedded into a widget via QWebEngine, giving you a Chrome-like browser window if you would accept that instead of Firefox.

                If you can do any embedding of external windows have a look at e.g. https://stackoverflow.com/questions/33699258/qt-5-5-embed-external-application-into-qwidget, https://stackoverflow.com/questions/52608457/qt-5-11-embed-external-application-into-qwidget, etc.

                B Offline
                B Offline
                belal
                wrote on 10 Apr 2022, 09:34 last edited by
                #7

                @JonB Great. Thanks very much for your help. I will try the mentioned solutions.

                Belal Hamdy,
                Software Development Engineer.

                1 Reply Last reply
                0
                • J JonB
                  10 Apr 2022, 09:28

                  @belal
                  You can run these via QProcess from your Qt application. They will open their own windows as they normally do.

                  Firefox is a web browser. Qt offers the chromium embedded into a widget via QWebEngine, giving you a Chrome-like browser window if you would accept that instead of Firefox.

                  If you can do any embedding of external windows have a look at e.g. https://stackoverflow.com/questions/33699258/qt-5-5-embed-external-application-into-qwidget, https://stackoverflow.com/questions/52608457/qt-5-11-embed-external-application-into-qwidget, etc.

                  B Offline
                  B Offline
                  belal
                  wrote on 11 Apr 2022, 14:01 last edited by
                  #8

                  @JonB said in Starting an application and view its GUI inside QWidget (Linux):

                  QProcess

                  The mentioned answers tends to move the started process GUI to the widget. I want to start a process and view the process GUI only inside the widget but the process will work out of my application.

                  Belal Hamdy,
                  Software Development Engineer.

                  J J 2 Replies Last reply 11 Apr 2022, 14:10
                  0
                  • B belal
                    11 Apr 2022, 14:01

                    @JonB said in Starting an application and view its GUI inside QWidget (Linux):

                    QProcess

                    The mentioned answers tends to move the started process GUI to the widget. I want to start a process and view the process GUI only inside the widget but the process will work out of my application.

                    J Offline
                    J Offline
                    JonB
                    wrote on 11 Apr 2022, 14:10 last edited by
                    #9

                    @belal Don't know what you mean, or what the distinction is.

                    1 Reply Last reply
                    0
                    • B belal
                      11 Apr 2022, 14:01

                      @JonB said in Starting an application and view its GUI inside QWidget (Linux):

                      QProcess

                      The mentioned answers tends to move the started process GUI to the widget. I want to start a process and view the process GUI only inside the widget but the process will work out of my application.

                      J Offline
                      J Offline
                      jsulm
                      Lifetime Qt Champion
                      wrote on 11 Apr 2022, 14:22 last edited by
                      #10

                      @belal said in Starting an application and view its GUI inside QWidget (Linux):

                      I want to start a process and view the process GUI only inside the widget but the process will work out of my application.

                      That is exactly what it does!

                      https://forum.qt.io/topic/113070/qt-code-of-conduct

                      1 Reply Last reply
                      1
                      • B Offline
                        B Offline
                        belal
                        wrote on 11 Apr 2022, 14:25 last edited by
                        #11

                        @JonB
                        I need to display the GUI of the running QProcess inside the QWidget only. Not to embed the whole process inside the widget. For example I want to start detatched gnome-calculator from QProcess and this will run gnome-calculator normally. Then display the GUI of the process inside a QWidget so whenever a change happens to the process gnome-calculator I should see it inside the widget.

                        Belal Hamdy,
                        Software Development Engineer.

                        J J 2 Replies Last reply 11 Apr 2022, 14:28
                        0
                        • B belal
                          11 Apr 2022, 14:25

                          @JonB
                          I need to display the GUI of the running QProcess inside the QWidget only. Not to embed the whole process inside the widget. For example I want to start detatched gnome-calculator from QProcess and this will run gnome-calculator normally. Then display the GUI of the process inside a QWidget so whenever a change happens to the process gnome-calculator I should see it inside the widget.

                          J Offline
                          J Offline
                          JonB
                          wrote on 11 Apr 2022, 14:28 last edited by
                          #12

                          @belal said in Starting an application and view its GUI inside QWidget (Linux):

                          I need to display the GUI of the running QProcess inside the QWidget only. Not to embed the whole process inside the widget.

                          Don't know what you mean, and will be surprised if @jsulm does either :)

                          Something run via QProcess is a separate process, period. The example code shows how you can cause its UI to appear inside a widget of yours in your app instead of its own window quite outside your Qt app.

                          1 Reply Last reply
                          0
                          • B belal
                            11 Apr 2022, 14:25

                            @JonB
                            I need to display the GUI of the running QProcess inside the QWidget only. Not to embed the whole process inside the widget. For example I want to start detatched gnome-calculator from QProcess and this will run gnome-calculator normally. Then display the GUI of the process inside a QWidget so whenever a change happens to the process gnome-calculator I should see it inside the widget.

                            J Offline
                            J Offline
                            jsulm
                            Lifetime Qt Champion
                            wrote on 11 Apr 2022, 14:28 last edited by
                            #13

                            @belal said in Starting an application and view its GUI inside QWidget (Linux):

                            Not to embed the whole process inside the widget

                            You can't embed a process in a widget!
                            You can only embed the GUI of another application running in its own process in a widget.
                            And that is what @JonB suggested.
                            Really don't know what else to say here.

                            https://forum.qt.io/topic/113070/qt-code-of-conduct

                            1 Reply Last reply
                            1
                            • B Offline
                              B Offline
                              belal
                              wrote on 11 Apr 2022, 14:36 last edited by belal 4 Nov 2022, 14:36
                              #14

                              @jsulm @JonB
                              I will show you the error that I get.

                              #include "mainwindow.h"
                              
                              #include <QApplication>
                              #include<QProcess>
                              #include<QDesktopServices>
                              #include<QUrl>
                              #include<QWindow>
                              int main(int argc, char *argv[])
                              {
                                  QApplication a(argc, argv);
                                  QMainWindow *w = new QMainWindow();
                                  w->setWindowTitle("Genome Embedded Calculator");
                                  QWindow* window = QWindow::fromWinId(41943047); // Hardcoded Window Id for Genome Calculator
                                  window->setFlags(Qt::FramelessWindowHint);
                                  QWidget *widget = QWidget::createWindowContainer(window);
                                  w->setCentralWidget(widget);
                                  w->show();
                                  return a.exec();
                              }
                              

                              Here is the code that I am trying to run. I run the genome calculator and get it's WinId by using this command

                              xdotool search --pid [Genome_Calculator_Process_ID]
                              

                              When I run the application I get an error in the terminal says:

                              (gnome-calculator:7284): Gtk-WARNING **: 16:03:49.869: gtk_widget_size_allocate(): attempt to allocate widget with width -33 and height 46
                              
                              (gnome-calculator:7284): Gtk-WARNING **: 16:03:49.869: Negative content width -25 (allocation 1, extents 13x13) while allocating gadget (node button, owner GtkMenuButton)
                              
                              (gnome-calculator:7284): Gdk-WARNING **: 16:03:57.145: GdkWindow 0x2800007 unexpectedly destroyed
                              
                              (gnome-calculator:7284): GLib-GObject-WARNING **: 16:03:57.145: invalid (NULL) pointer instance
                              
                              (gnome-calculator:7284): GLib-GObject-CRITICAL **: 16:03:57.145: g_signal_handler_disconnect: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed
                              
                              (gnome-calculator:7284): Gdk-CRITICAL **: 16:03:57.145: gdk_frame_clock_end_updating: assertion 'GDK_IS_FRAME_CLOCK (frame_clock)' failed
                              
                              

                              Belal Hamdy,
                              Software Development Engineer.

                              J 1 Reply Last reply 11 Apr 2022, 14:58
                              0
                              • B belal
                                11 Apr 2022, 14:36

                                @jsulm @JonB
                                I will show you the error that I get.

                                #include "mainwindow.h"
                                
                                #include <QApplication>
                                #include<QProcess>
                                #include<QDesktopServices>
                                #include<QUrl>
                                #include<QWindow>
                                int main(int argc, char *argv[])
                                {
                                    QApplication a(argc, argv);
                                    QMainWindow *w = new QMainWindow();
                                    w->setWindowTitle("Genome Embedded Calculator");
                                    QWindow* window = QWindow::fromWinId(41943047); // Hardcoded Window Id for Genome Calculator
                                    window->setFlags(Qt::FramelessWindowHint);
                                    QWidget *widget = QWidget::createWindowContainer(window);
                                    w->setCentralWidget(widget);
                                    w->show();
                                    return a.exec();
                                }
                                

                                Here is the code that I am trying to run. I run the genome calculator and get it's WinId by using this command

                                xdotool search --pid [Genome_Calculator_Process_ID]
                                

                                When I run the application I get an error in the terminal says:

                                (gnome-calculator:7284): Gtk-WARNING **: 16:03:49.869: gtk_widget_size_allocate(): attempt to allocate widget with width -33 and height 46
                                
                                (gnome-calculator:7284): Gtk-WARNING **: 16:03:49.869: Negative content width -25 (allocation 1, extents 13x13) while allocating gadget (node button, owner GtkMenuButton)
                                
                                (gnome-calculator:7284): Gdk-WARNING **: 16:03:57.145: GdkWindow 0x2800007 unexpectedly destroyed
                                
                                (gnome-calculator:7284): GLib-GObject-WARNING **: 16:03:57.145: invalid (NULL) pointer instance
                                
                                (gnome-calculator:7284): GLib-GObject-CRITICAL **: 16:03:57.145: g_signal_handler_disconnect: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed
                                
                                (gnome-calculator:7284): Gdk-CRITICAL **: 16:03:57.145: gdk_frame_clock_end_updating: assertion 'GDK_IS_FRAME_CLOCK (frame_clock)' failed
                                
                                
                                J Offline
                                J Offline
                                JonB
                                wrote on 11 Apr 2022, 14:58 last edited by
                                #15

                                @belal
                                No idea. Maybe a problem with Gtk/Gdx/gnome-calculator running in the way. Maybe Firefox would work, maybe not. That stackoverflow post shows you what you can do run an external application with input/output to a widget, that's all I know.

                                1 Reply Last reply
                                0

                                1/15

                                6 Apr 2022, 14:13

                                • Login

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