Qt之QProcess 和 c语言对比

本文介绍了如何使用QProcess进行命令行参数传递、标准输入输出处理及返回值获取,并对比了不同方法的特点。

命令行参数

大多控制台程序都接受命令行参数,一个例子:

#include <stdio.h>
int main(int argc, char **argv)
{
    for (int i=1; i<argc; ++i)
        printf("%s\n", argv[i]);
    return 0;
}

编译,调用程序时可指定命令行,结果:

$ ./process a b "c d"
a
b
c d

用QProcess调用外部程序时,可直接指定命令行参数

QProcess process;
//
process.execute();//这个函数的 功能 是 调用 外部程序时 会阻塞,知道 外部程序结束

process.start("./process", QStringList()<<"a"<<"b");process.start("./process a b");

后一种写法看起来写起来比较简洁,但是程序路径或参数中包括空格时,就不如第一种方便了。


标准输出

对于控制台程序来说,这个可能是用的最多的了。比如上一个程序,我们遍历命令行参数,然后输到标准输出。

在控制台下,我们通常会使用重定向功能,比如:

$./process a b "c d" > out.txt 

在QProcess下,我们使用

QProcess::readAllStandardOutput ()

获取标准输出

QProcess::setStandardOutputFile()

设置输出到的文件,相当于前面的重定向

QProcess process;
process.start("./process", QStringList()<<"a"<<"b");
process.readAllStandardOutput();

可以使用:

  • QProcess::setStandardOutputProcess()

将标准输出作为另个进程的标准输入。形成 ls -l | more 这样的管道操作

由于QProcess是QIODevice的派生类,故:

  • read()
  • readLine()
  • ...

都可以直接用获取被调用程序的标准输出。


标准出错

相对于标准输出,这个东西大家似乎用的比较少了。

#include <stdio.h>

int main(int argc, char **argv)
{
    fprintf(stdout, "Hello STDOUT!\n");
    fprintf(stderr, "Hello STDERR!\n");
    return 0;
}

编译运行(注意区分两个流,标准出错的文件描述符是2):

$ ./process
Hello STDOUT!
Hello STDERR!
$ ./process > out.txt
Hello STDERR!
$ ./process > out.txt 2>err.txt
$


标准输入

这个也不用多说,使用scanf()/gfets()等函数:

#include <stdio.h>

int main(int argc, char **argv)
{
    char contents[1024];
    fgets(contents, 1024, stdin);
    printf("output: %s", contents);
    return 0;
}

运行:

$ ./process 
1+1=2
output: 1+1=2

如果要输入的内容在文件内,也可以使用重定向

$ ./process < intput.txt
output: contents of input.txt

在QProcess中,直接使用QIODevice的write()函数

QProcess process;
process.start("./process")
process.write("intput");

也可以设置文件作为输入

  • QProcess::setStandardInputFile()

返回值

似乎很多人分不清返回值和标准输出的概念。

int main()
{
return 0;
}

也就是程序中 return X/exit(X) 等函数中指定的值了。

在Windows下,通过

C:\> process.exe
C:\> echo %errorlevel%

在Linux下,通过

$ ./process
$ echo $?

获得返回值。

在QProcess下,则通过:

  • int QProcess::execute()
  • int QProcess::exitCode()

获得返回值。











qt是一个跨平台的C++应用程序开发框架,它提供了丰富的GUI组件工具来简化加速应用程序的开发。动态执行输入框里的C语言代码,可以通过以下步骤实现: 首先,需要在qt中创建一个输入框用于输入C语言代码。可以使用qt中的QLineEdit或者QPlainTextEdit组件来实现这个输入框。 其次,需要在qt中创建一个执行按钮,用于触发执行输入框中的C语言代码。可以使用qt中的QPushButton组件来实现这个按钮。 然后,可以通过信号槽机制来连接执行按钮的点击事件执行C语言代码的槽函数。当执行按钮被点击时,槽函数会从输入框中获取C语言代码,并动态地执行这段代码。 在槽函数中,可以使用QtQProcess类来调用系统命令行执行C语言代码。QProcess类提供了很多函数来启动外部程序、读取输出错误信息,可以很方便地用来执行C语言代码。 最后,需要注意安全性错误处理。动态执行用户输入的C语言代码可能存在安全风险,因此需要做好输入验证安全防护。同时,还需要处理C语言代码执行过程中可能出现的错误异常,以确保程序的稳定性可靠性。 通过以上步骤,就可以在qt中实现动态执行输入框里的C语言代码的功能。这样的功能可以用于实现一些自定义的交互式工具或者在线编程平台,为用户提供灵活便捷的编程体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值