Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct
[Solved]QT widget doesnt work due to open a file in a QProcess
i have here a nice problem.
I wrote a small gui for starting a perlscript. This script prints out the stuff which is defined in my gui.After that i write a file with the variables and start thru a QProcess a perlscript to process the data.
The problem is, that the perl script isnt working. If i comment out the open file, in the perlscript everything is ok.
Thanks for some hints..
Below see my files.
QString Variant = ui->inputVariant->text();
QString Load = ui->inputLoad->text();
list << Variant << Load ;
foreach(const QString &s, list)
str << s << endl;
//start perlscript QProcess perl; perl.start("./fs1/PerlQt/QtCreator/test/test.pl"); perl.waitForFinished(-1); QString p_stdout = perl.readAllStandardOutput(); QString p_stderr = perl.readAllStandardError(); //output in textwindow ui->output->setText(p_stderr); ui->output->setText(p_stdout);
print "Name \n\n"; #print name
print "=> $files \n"; #print the first entry in array files
open incl, 'variables.inp' or die "Datei nicht gefunden $!"; # open the file variables.inp
@files = <incl>; #read in file and fill a array @files
close(incl); #close file
print "agghagh \n\n"; #print stupid stuff
print_var(); #print the stuff which is in sub print_var@
Jeroentjehome last edited by
Hmm, Your code is almost unreadable! Place it in the code box please!!
At first sight, you try to open a file with perl that is still opened by QFile (the data might be still in a buffer and not yet on the disk).
What happens if you close inputFile before calling your perl script ?
tried and the same. no output.
Just in case, did you saw that your inputFile is "/fs1/PerlQt/QtCreator/test/variables.inp" and your script is "./fs1/PerlQt/QtCreator/test/test.pl" <= There's a dot in front here.
By default QProcess is started with a working directory of the calling process. Since you have a relative path in your perl script it is looking for input file in the directory of your executable, not where the script file is. Use QProcess::setWorkingDirectory() to change that.
@SGaist: ./ is for start the script here. This is normal linux stuff, but thanks for the hint.
@krzysztof: i catch stderr, so ishould get an error,file not found and the perlscript should print the first aggah and then i shold get errormessage, because the file is processed after the print command. Setting the file to an absolut path didnt work as well.
but anyway thanks to u guys.
Hope we will find the error, any others thoughts....
Ok, this might be stupid because I know little about linux and how QProcess behaves there, but maybe this would work?
as well no output.
That's why i suggested you to double check the use of "./" since your inputFile path is an absolute path but your perl script path is relative. That might be the culprit.
i changed everything to absolute paths and started the perl with
Thats not the problem. there is still no output.
Did you check the working directory of your perl script ?
Besides that, make it print the content of the current directory, that might give your some clues
For all whoo are interessted in.
The problem was the following code in perl, which wasnt correctly compiled due QT.
@open incl, 'variables.inp' or die "Datei nicht gefunden $!"; # open the file variables.inp@
This line open a file and if the file not exists the applikation die and print file not found.
I found out, that without the booleen or die everything is ok and worked.
Thanks for all your post and the help.