标题:QProcess调用控制台程序,不弹出界面?
作者:foxgod
日期:2014-09-23 11:45
内容:
QProcess调用QT写的控制台程序,但是程序虽然执行了,但是界面不弹出来,程序在任务管理器里面虽然显示已经运行了,如何在界面显示出来呢??
#1 [dbzhang800 09-23 11:49]
1. 不用 QProcess
2. 用 QProcess 启动你要显示的终端(Ternimal)或命令行(cmd.exe),在终端或命令行中启动你的程序
3.
#2 回 dbzhang800 的帖子 [foxgod 09-23 11:57]
dbzhang800:1. 不用 QProcess
2. 用 QProcess 启动你要显示的终端(Ternimal)或命令行(cmd.exe),在终端或命令行中启动你的程序
3. (2014-09-23 11:49)
啥意思,没明白
#3 回 foxgod 的帖子 [dbzhang800 09-23 13:50]
foxgod:啥意思,没明白 (2014-09-23 11:57)
好吧,当我没说。
首先,所谓的控制台程序,就是在控制台下运行下的程序,这个没有疑问吧?
先打开一个控制台,比如unix下的终端(Ternimal)或windows下的命令行(Command Prompt),而后在里面运行你的控制台程序。
注意:在Windows下的资源管理器中(explorer.exe),双击控制台程序也可以启动它,而且Windows会为其提供一个Console(可能是你这儿提到的界面)。 但是这个看似便利的东西却使得很多新手搞不清楚 命令行程序 基本特性(包括对命令行参数、标准输入、输出、出错和返回值理解困难等)。
其次,要启动一个进程,归根到底:在Windows下,就是CreateProcess(),在posix下,就是fork() 和 exec()。如果QProcess提供的封装不能满足你的要求,你可以直接去研究相应的系统API。或者其他库对系统API的封装,比如C标准库中的system() 和 popen() 等
#4 回 dbzhang800 的帖子 [foxgod 09-23 14:39]
dbzhang800:好吧,当我没说。
首先,所谓的控制台程序,就是在控制台下运行下的程序,这个没有疑问吧?
....... (2014-09-23 13:50)
QProcess *process = new QProcess;
process->start("cmd.exe);
这样为啥CMD,还是弹不出界面呢,只是在任务管理器有显示??
#5 [dbzhang800 09-23 16:26]
QProcess 有两种用法。
一个是调用 start() 或 execute():此时被调用函数的标准输入、标准输出、标准出错 都已经被重定向到QProcess创建的相应的管道中。在这种情况下,即使你的控制台程序有自己的Console,那么它既不能接收任何输入,也不会输出任何内容。
另一个用法是,startDetached():这是QProcess启动你的控制台程序后,没有任何额外的操作,你也在当前程序中无法控制它。不过,在Windows下,会有一个你期望的Console出现;在其他系统下,不会有终端显示出来。
如果你需要更详细的控制,你应该去MSDN上查相应的API(猜测你只对Windows程序感兴趣,并没考虑跨平台)。