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. QProcess: start a compiled c program and output to textBrowser in Linux

QProcess: start a compiled c program and output to textBrowser in Linux

Scheduled Pinned Locked Moved Unsolved General and Desktop
executec programqprocesstextbrowserlinux
13 Posts 6 Posters 4.2k Views
  • 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.
  • ? Offline
    ? Offline
    A Former User
    wrote on last edited by
    #2

    Hi, welcome to the forum. Check the ProcessError to get a hint on what went wrong. Also, add a call to waitForStarted and see if it hangs. Judging by the pathname, your a.out is owned by the user root. I assume you're not logged in as root so you probably don't have the sufficient access rights to run that executable.

    N 1 Reply Last reply
    2
    • mrjjM Offline
      mrjjM Offline
      mrjj
      Lifetime Qt Champion
      wrote on last edited by mrjj
      #3

      Hi
      Besides what @Wieland suggests
      did you try open a shell and just type
      /root/Desktop/a.out

      and see if it can run ?

      in some cases it wants
      chmod +x a.out

      to even be allowed to run.
      (normally the compiler / linker does that for you)

      1 Reply Last reply
      1
      • N Naim

        I have search and looked at other examples but nothing seems to work.
        Here are where I've referred to:
        http://www.qtforum.org/article/3079/howto-start-an-external-program-from-a-qt-application.html
        http://doc.qt.io/qt-5/qprocess.html
        and a few others

        Here's what I have in my project:
        mainwindow.h

        #ifndef MAINWINDOW_H
        #define MAINWINDOW_H
        
        #include <QMainWindow>
        
        namespace Ui {
        class MainWindow;
        }
        
        class MainWindow : public QMainWindow
        {
            Q_OBJECT
        
        public:
            explicit MainWindow(QWidget *parent = 0);
            ~MainWindow();
        
        private slots:
            void on_pushButton_clicked();
        
        private:
            Ui::MainWindow *ui;
        };
        
        #endif // MAINWINDOW_H
        

        main.cpp

        #include "mainwindow.h"
        #include <QApplication>
        #include <QPushButton>
        
        int main(int argc, char *argv[])
        {
            QApplication a(argc, argv);
            MainWindow w;
            w.show();
        
            return a.exec();
        }
        

        mainwindow.cpp

        #include "mainwindow.h"
        #include "ui_mainwindow.h"
        #include <QProcess>
        
        MainWindow::MainWindow(QWidget *parent) :
            QMainWindow(parent),
            ui(new Ui::MainWindow)
        {
            ui->setupUi(this);
        }
        
        MainWindow::~MainWindow()
        {
            delete ui;
        }
        
        void MainWindow::on_pushButton_clicked()
        {
            QProcess proc;
            proc.start("/root/Desktop/a.out");
        
            proc.waitForFinished();
            QString output = proc.readAllStandardOutput();
            ui->textBrowser->setText(output);
        }
        

        mainwindow.ui

        <?xml version="1.0" encoding="UTF-8"?>
        <ui version="4.0">
         <class>MainWindow</class>
         <widget class="QMainWindow" name="MainWindow">
          <property name="geometry">
           <rect>
            <x>0</x>
            <y>0</y>
            <width>683</width>
            <height>519</height>
           </rect>
          </property>
          <property name="maximumSize">
           <size>
            <width>1112</width>
            <height>625</height>
           </size>
          </property>
          <property name="windowTitle">
           <string>MainWindow</string>
          </property>
          <widget class="QWidget" name="centralWidget">
           <widget class="QTextBrowser" name="textBrowser">
            <property name="geometry">
             <rect>
              <x>20</x>
              <y>50</y>
              <width>631</width>
              <height>191</height>
             </rect>
            </property>
           </widget>
           <widget class="QWidget" name="layoutWidget">
            <property name="geometry">
             <rect>
              <x>20</x>
              <y>10</y>
              <width>631</width>
              <height>30</height>
             </rect>
            </property>
            <layout class="QHBoxLayout" name="horizontalLayout">
             <item>
              <widget class="QPushButton" name="pushButton">
               <property name="text">
                <string>Start pcap (100p)</string>
               </property>
              </widget>
             </item>
             <item>
              <spacer name="horizontalSpacer">
               <property name="orientation">
                <enum>Qt::Horizontal</enum>
               </property>
               <property name="sizeHint" stdset="0">
                <size>
                 <width>200</width>
                 <height>20</height>
                </size>
               </property>
              </spacer>
             </item>
            </layout>
           </widget>
          </widget>
          <widget class="QMenuBar" name="menuBar">
           <property name="geometry">
            <rect>
             <x>0</x>
             <y>0</y>
             <width>683</width>
             <height>25</height>
            </rect>
           </property>
          </widget>
          <widget class="QToolBar" name="mainToolBar">
           <attribute name="toolBarArea">
            <enum>TopToolBarArea</enum>
           </attribute>
           <attribute name="toolBarBreak">
            <bool>false</bool>
           </attribute>
          </widget>
          <widget class="QStatusBar" name="statusBar"/>
         </widget>
         <layoutdefault spacing="6" margin="11"/>
         <resources/>
         <connections/>
        </ui>
        
        

        When I clicked the pushButton nothing happens but if I tried using Linux system's command in the QProcess such as

            QProcess proc;
            proc.start("ls -al");
        
            proc.waitForFinished();
            QString output = proc.readAllStandardOutput();
            ui->textBrowser->setText(output);
        

        It works where in the textBrowser it will list files/folders in the home directory.
        I've also tried with sh -c but still doesn't work.

            proc.start("sh", QStringList() << "-c" << "/root/Desktop/a.out");
        

        Is there way to execute a compiled c program using QProcess?
        I'm at lost

        JonBJ Offline
        JonBJ Offline
        JonB
        wrote on last edited by
        #4

        @Naim , @mrjj
        If you like trivia (you probably don't...), you can actually execute it without the execute bit set via the accepted answer to https://superuser.com/questions/341439/can-i-execute-a-linux-binary-without-the-execute-permission-bit-being-set :)

        mrjjM 1 Reply Last reply
        1
        • JonBJ JonB

          @Naim , @mrjj
          If you like trivia (you probably don't...), you can actually execute it without the execute bit set via the accepted answer to https://superuser.com/questions/341439/can-i-execute-a-linux-binary-without-the-execute-permission-bit-being-set :)

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

          @JNBarchan
          But does it set the bit ?
          chmod a-x /tmp/ls

          aha_1980A 1 Reply Last reply
          0
          • ? A Former User

            Hi, welcome to the forum. Check the ProcessError to get a hint on what went wrong. Also, add a call to waitForStarted and see if it hangs. Judging by the pathname, your a.out is owned by the user root. I assume you're not logged in as root so you probably don't have the sufficient access rights to run that executable.

            N Offline
            N Offline
            Naim
            wrote on last edited by Naim
            #6

            @Wieland Yes I'm using root. As for ProcessError and waitForStarted I'll reply that later
            @mrjj I compiled a.out as the root user

            mrjjM 1 Reply Last reply
            0
            • N Naim

              @Wieland Yes I'm using root. As for ProcessError and waitForStarted I'll reply that later
              @mrjj I compiled a.out as the root user

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

              @Naim
              Ok, so you are logged in as root. so its not just rights issue.
              Hopefully ProcessError tells you why it cant run :)

              aha_1980A 1 Reply Last reply
              0
              • mrjjM mrjj

                @Naim
                Ok, so you are logged in as root. so its not just rights issue.
                Hopefully ProcessError tells you why it cant run :)

                aha_1980A Offline
                aha_1980A Offline
                aha_1980
                Lifetime Qt Champion
                wrote on last edited by
                #8

                @Naim: As @mrjj already asked earlier before:

                Can you run /root/Desktop/a.out from the shell? It might be, that /root is on a partition that is mounted as no-executable. Why has to program to reside below /root?

                Qt has to stay free or it will die.

                N 1 Reply Last reply
                1
                • mrjjM mrjj

                  @JNBarchan
                  But does it set the bit ?
                  chmod a-x /tmp/ls

                  aha_1980A Offline
                  aha_1980A Offline
                  aha_1980
                  Lifetime Qt Champion
                  wrote on last edited by
                  #9

                  @mrjj said in QProcess: start a compiled c program and output to textBrowser in Linux:

                  @JNBarchan
                  But does it set the bit ?
                  chmod a-x /tmp/ls

                  chmod a-x /tmp/ls clears the executable bit ;)

                  Qt has to stay free or it will die.

                  mrjjM 1 Reply Last reply
                  1
                  • aha_1980A aha_1980

                    @mrjj said in QProcess: start a compiled c program and output to textBrowser in Linux:

                    @JNBarchan
                    But does it set the bit ?
                    chmod a-x /tmp/ls

                    chmod a-x /tmp/ls clears the executable bit ;)

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

                    @aha_1980
                    ahh of course its -x :)
                    my brain said a TO x (facepalm)
                    So it can run without it using LD and some magic. Cool.

                    1 Reply Last reply
                    0
                    • aha_1980A aha_1980

                      @Naim: As @mrjj already asked earlier before:

                      Can you run /root/Desktop/a.out from the shell? It might be, that /root is on a partition that is mounted as no-executable. Why has to program to reside below /root?

                      N Offline
                      N Offline
                      Naim
                      wrote on last edited by
                      #11

                      @aha_1980 Yes I can run it in shell with ./root/Desktop/a.out. I'm using the root user on a virtual machine.

                      N 1 Reply Last reply
                      0
                      • N Naim

                        @aha_1980 Yes I can run it in shell with ./root/Desktop/a.out. I'm using the root user on a virtual machine.

                        N Offline
                        N Offline
                        Naim
                        wrote on last edited by
                        #12

                        I may have find the problem here. My C program a.out runs indefinitely and textBrowser only shows the output once my program have finished executing. I've tried to run another C program that accepts command line input to loop how many times. Its output shows up in textBrowser after it has done looping.

                        jsulmJ 1 Reply Last reply
                        0
                        • N Naim

                          I may have find the problem here. My C program a.out runs indefinitely and textBrowser only shows the output once my program have finished executing. I've tried to run another C program that accepts command line input to loop how many times. Its output shows up in textBrowser after it has done looping.

                          jsulmJ Offline
                          jsulmJ Offline
                          jsulm
                          Lifetime Qt Champion
                          wrote on last edited by
                          #13

                          @Naim Use http://doc.qt.io/qt-5/qprocess.html#readyReadStandardOutput and http://doc.qt.io/qt-5/qprocess.html#readyReadStandardError to get notifications each time the process writes something to stdout or stderr and read it using http://doc.qt.io/qt-5/qprocess.html#readAllStandardOutput and http://doc.qt.io/qt-5/qprocess.html#readAllStandardError. Do not call waitForFinished, just make sure your proc does not go out of scope (make it class member).

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

                          1 Reply Last reply
                          3

                          • Login

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