QT中如何使一个程序隐式运行另一个程序
由于需要,我自己开发了一个Linux下的程序,但是为了方便,我要用QT包装一下。
我那程序叫做key,平时我要打开终端后,通过cd到具体地址后,再输入./key < data,data为输入文件,这样我才能正常运行程序并且返回输出的结果。
我在网上看了一些方法,可以直接用 system("./key < data");,我试过确实有结果,结果却显示在QT下的Consloe中,问题是,我还要运行key后的输出结果。
system这函数好像只是运行了就算,什么都不管了,但是这样我却无法得到其输出结果。
我也找到了一些说用QProcess的,我也试过,可能不怎么会用,我通过process.start("gnome-terminal");,打开的只是终端,我不知道要怎么运行./key < data 命令,但是就算可以运行,却有一个不是我想要的结果,因为start后,终端会被显式地打开(我想它能隐式运行),这并不是我想要的结果,我要的是程序在隐式运行后,把结果传到QT程序上去。
后来我也看了一下QThread,因为自己很少用写线程代码,所以也不知道哪种方法能达到我想要的效果。
望高手会指点!
[解决办法]
我没试过输入定向,如果输入定向不好使的话,可以试着把Data里面的内容读出来,再通过Process启动key程序,使用Process.write进行输入。
QProcess process;
process.setWorkingDirectory("/xx/xx/");
QFile file("/xx/xx/xx");
file.open(QFile::ReadOnly);
process.start("/xx/xx/key");
process.waitForStarted();
process.write(file.readAll());
process.closeWriteChannel();
process.waitForFinished();
QMessageBox::information(this, "", QString::fromLocal8Bit(process.readAll().data()));