Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

QProcess unexpectedly finished



  • Hello
    I'm quite new in this qt.
    I'm trying to use QProcess foor running some application (especially roslaunch) and kill it.
    I know that i must use QProcess but I cannot run even example QProcess.

    The UI is appeared with only one pushbutton but when I push it, it not appear the analogclock but it's just quit the UI and showing error like this :

    12:00:05: Starting /home/krist/qt_proj/build-try_QProcess-Desktop-Debug/try_QProcess ...
    12:00:07: The program has unexpectedly finished.
    12:00:07: The process was ended forcefully.
    12:00:07: /home/krist/qt_proj/build-try_QProcess-Desktop-Debug/try_QProcess crashed.

    here is my code :

    #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()
    {
        QObject *parent;
         QString program = "./krist/QT5.13.2/examples/QT-5.13.2/gui/analogclock";
         QStringList arguments;
         arguments << "-style" << "motif";
    
         QProcess *myProcess = new QProcess(parent);
         myProcess->start(program, arguments);
    
    }
    
    

    anyone can help me?
    thank you very much
    best regards


  • Moderators

    No worries, happy coding :-)


  • Moderators

    @krist said in QProcess unexpedtedly finished:

    QProcess *myProcess = new QProcess(parent);

    Your parent is an invalid object (not initialized with new). Do this instead:

    QProcess *myProcess = new QProcess(this);
    

    Here this is your MainWindow - it will act as parent for your process object.



  • Thank you for the answer sierdzio.

    I have updated my code becoming this

    #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 *myProcess = new QProcess(this);
         QString program = "./home/krist/Qt5.13.2/examples/Qt-5.13.2/gui/analogclock";
         QStringList arguments;
         arguments << "-style" << "motif";
         myProcess->start(program, arguments);
    
    
    }
    
    

    but when i klik the UI button, nothing is runnable.
    when I look at the analogclock example file, that path is true.
    Inside that path there are only 3 files:

    1. analogclock.pro
    2. analogclock.pro.user
      3.main.cpp

    sory, I'm new about this qt


  • Moderators

    QProcess can only run a binary file. You need to compile AnalogClock first, then change your path to point exactly to the resulting binary file.



  • I have run the analogClock, but i don't know where the binary file go

    can you please guide me?
    or maybe do you have a refrence video to do it?
    I am very appreciated it

    after i run, there is appear build-analogclock ... debug
    is it the binary file go?
    and inside it, there are 7 file in it

    thank you


  • Moderators

    Go into that build directory, there will be analogclock file in there (it will have executable permissions, easy to spot if you run ls -aGl in the directory, or by looking at icon in some file manager) - that's your binary.



  • @krist said in QProcess unexpectedly finished:

    I have run the analogClock, but i don't know where the binary file go

    What does "run" mean? You have to build --- compile & link --- the analogclock project, either for debug or for release. That puts the executable in a directory as specified in the .pro file/look at your Qt Creator settings for building. That is what you need to execute. No, there is no "reference video" for this. It's what building from source code is all about.

    after i run, there is appear build-analogclock ... debug
    is it the binary file go?

    Did you try looking in that directory, for an executable named analogclock?

    From the output you showed earlier:
    Starting /home/krist/qt_proj/build-try_QProcess-Desktop-Debug/try_QProcess ...
    While for your QProcess command you show
    ./krist/QT5.13.2/examples/QT-5.13.2/gui/analogclock
    How are these two paths related? Why have you placed a ./ at the start of that? What is your current directory? I would recommend only using absolute paths, not relative, so you know what is going on.



  • thank you for the answers

    Starting /home/krist/qt_proj/build-try_QProcess-Desktop-Debug/try_QProcess ...
    

    is mine project where i make.

    and the QT5.13.2 is where the analogclock file is

    what i mean run is build and run (click on the little hammer in the left below qt and the play icon).

        QProcess *myProcess = new QProcess(this);
         QString program = "/home/krist/Qt5.13.2/examples/Qt-5.13.2/gui/build-analogclock-Desktop_Qt_5_13_2_GCC_64bit-Debug/analogclock";
         QStringList arguments;
         arguments << "-style" << "motif";
         myProcess->start(program, arguments);
    

    I have found the analogclock at file build-analogclock-Desktop ...
    but when i source it like below, nothing happened
    Is there anything wrong?


  • Moderators

    Probably the example fails to run because Qt libraries are not found by ldd. You need to set LD_LIBRARY_PATH for it to work.

    To get the actual error messages or warnings coming from QProcess, make sure you connect to errorOccured signal and get all output from stderr.



  • I just realied that every time I build and run there is always a notification like this :

    15:25:54: Starting /home/krist/qt_proj/build-try_qprocess1-Desktop-Debug/try_qprocess1 ...
    15:25:58: The program has unexpectedly finished.
    15:25:58: The process was ended forcefully.
    15:25:58: /home/krist/qt_proj/build-try_qprocess1-Desktop-Debug/try_qprocess1 crashed.
    

    Is it the error that you looking for?


  • Moderators

    @krist said in QProcess unexpectedly finished:

    Is it the error that you looking for?

    It's not me looking for errors here, it's you :-)

    15:25:58: The program has unexpectedly finished.

    No, this tells us nothing. We need more information. Run your app with a debugger (F5), it will show you where the crash occurs.



  • yeah i know that the big error lies on me
    :(

    here is the picture of debugging
    I have several times click the button but still nothing happens and there is no notification?
    asdsadsd.png image url)

    FYI I'm using linux with QT 5.13.2


  • Moderators

    You've commented out the on_pushButton_clicked() slot, so it's not crashing.



  • oh sory
    I just try some others code earlier

    here is the right screenshoot

    mlopr.png


  • Moderators

    Does it crash when you click the button? The screenshot does not show any crash.



  • @krist
    I can see by enlarging your image that you are still not supplying the correct path for the subprocess. Nor does it even have the executable you wish to run. There is no point telling us here your code contains a certain string if it does not actually use that string. You need to understand the absolute basics about paths if you expect to develop code....

    Further, you should read the QProcess documentation and e.g. both check return results and errorOccurred slot if you are having trouble running a process and expect to get error status back.



  • Thank you both for your patience on me
    :(

    @JonB
    I use the path based on projects analogClock
    here is the screenshot
    based on what sierdiio said , i need to source my path to the binary file

    buildanalogclock.png

    @sierdzio
    Nothing crash just nothing happens



  • @krist said in QProcess unexpectedly finished:

    I use the path based on projects analogClock

    No, you don't. The screenshot (of your code running the QProcess) shows a path which is simply incorrect. Whether you've changed that since screenshot I cannot say.


  • Moderators

    @krist ok, as a step 1, why don't you open a console/terminal outside of QtCreator and try to launch the analogClock manually.

    Make sure that works, before you try it from inside your own program!



  • @J-Hilk
    hello

    yapps it's runnable
    the step i use is

    $cd Qt5.13.2/Examples/Qt-5.13.2/gui/build-analogclock-Desktop_Qt_5_13_2_GCC_64bit-Debug/
    enter
    $./analogclock
    


  • @krist
    Then you need to use something in your code which is actually the same as that, not what your screen shot has which is simply not the same!
    Hint: /home/krist/Qt5.13.2/Examples/Qt-5.13.2/gui/build-analogclock-Desktop_Qt_5_13_2_GCC_64bit-Debug/analogclock.
    Which you seem to have had at one point, and then changed to something wrong.



  • yeah i have tried that and error is come up
    here is the error

    /home/krist/Qt5.13.2/Examples/Qt-5.13.2/gui/build-analogclock-Desktop_Qt_5_13_2_GCC_64bit-Debug/analogclock: /usr/lib/x86_64-linux-gnu/libQt5Core.so.5: version `Qt_5.13' not found (required by /home/krist/Qt5.13.2/Examples/Qt-5.13.2/gui/build-analogclock-Desktop_Qt_5_13_2_GCC_64bit-Debug/analogclock)
    

  • Moderators

    @krist said in QProcess unexpectedly finished:

    yeah i have tried that and error is come up
    here is the error

    /home/krist/Qt5.13.2/Examples/Qt-5.13.2/gui/build-analogclock-Desktop_Qt_5_13_2_GCC_64bit-Debug/analogclock: /usr/lib/x86_64-linux-gnu/libQt5Core.so.5: version `Qt_5.13' not found (required by /home/krist/Qt5.13.2/Examples/Qt-5.13.2/gui/build-analogclock-Desktop_Qt_5_13_2_GCC_64bit-Debug/analogclock)
    

    That's where LD_LIBRARY_PATH comes in ;-) You can set it with https://doc.qt.io/qt-5/qprocess.html#setProcessEnvironment



  • @krist
    OK, let's start from there! That path is correct, so let's not change off that!

    Now you have some issue of not finding the correct Qt version.

    Are you Linux? Did you build your own Qt, or did you accept the one supplied with the distro? Have you installed more than one version of Qt at some point?

    Ah, I see @sierdzio is pointing you at what you can look at.... I will leave you in his capable hands :)



  • @sierdzio
    ok
    so right now the problem lies on my install qt right?
    where should i source that environment?
    is it to my workable analogclock?

    env.insert("TMPDIR", "C:\\MyApp\\temp"); // Add an environment variable
    

    @JonB
    yeah i'm using linux and have 2 qt (one with ros plugin and the others only for qt)
    tahnk you so much for your help!!!


  • Moderators

    @krist said in QProcess unexpectedly finished:

    @sierdzio
    ok
    so right now the problem lies on my install qt right?

    No. You simply have compiled AnalogClock using Qt incompatible with the one installed in the system. It's not an error, it's not a problem. Its actually quite common thing. Try double-cliking on your analogclock binary file - it will probably fail to run, too.

    The proper way to solve it is to deploy AnalogClock so that it runs on your system without any changes to paths.

    where should i source that environment?
    is it to my workable analogclock?

    env.insert("TMPDIR", "C:\\MyApp\\temp"); // Add an environment variable
    

    You need to add LD_LIBRARY_PATH and point it to your Qt 5.13.2 installation directory - where libraries are located. So something like:

    env.insert("LD_LIBRARY_PATH", "/home/krist/qt/Qt5.13.2/gcc_64/lib/");
    

    That needs to be fed to your QProcess so that the system can find proper Qt libraries when running Analog Clock example.

    The reason why it runs from Qt Creator is that Qt Creator sets LD_LIBRARY_PATH automatically.



  • @sierdzio
    wow
    thank you very much
    I succed doing that

    thank you for your hospitality and patience toward me
    sory i'm so late to noticed it


  • Moderators

    No worries, happy coding :-)



  • @krist
    Hi there. I just wanted to say: if I was too harsh on you here and your other posting which I see you have now deleted, I would not want you to be put off asking questions in this forum! You are entitled to ask whatever you like, this is a friendly & helpful forum. I am just grumpy :)

    So don't be put off by me. Just please put some attention to detail in your work. When coding, you have to get every character correct, it's no use seeing something to try and then not copying the correct stuff and changing it to something else. That's all.

    So no intention to upset you, best of luck. :)



  • @JonB
    hi JonB
    thank you very much for your effort to help me

    afterall, it is my fault not pay attention enough because my dozen trials failed .
    I will make sure next time to put the correct stuff for the question.

    thank you for your clarification
    glad to hear that


Log in to reply