这里是 Qt 新手:)。
我目前正在 Qt 中使用 popen
函数执行 bash 脚本,将输出重定向到我的应用程序中的文本浏览器。当我将脚本作为资源添加到我的项目中时,它似乎不再执行?我使用 :/myScript.sh
语法,然后尝试将参数添加为 QString。
任何建议将不胜感激!
FILE *in;
char buff[512];
QString args = ":/myScript.sh" + <arguments>;
QByteArray ba = args.toLatin1();
char *temp = ba.data();
if(!(in = popen(temp , "r")))
{
exit(1);
}
while(fgets(buff, sizeof(buff), in)!=NULL)
{
ui->txtConsole->append(buff);
}
ui->progressBar->setValue(50); pclose(in);
最佳答案
使用 Qt 资源路径格式调用 popen
不会达到您预期的效果。
您实际上正在尝试调用的是:
popen(":/myScript.sh args", "r");
popen
函数不了解有关 Qt 资源系统的任何信息,也不了解 :/
语法。它期望第一个参数是操作系统可以理解的磁盘路径。
两个选择:
只需将 myScript.sh 文件作为单独的文件发送并直接执行即可。 (在尝试使脚本成为资源之前您观察到的工作情况)。如果您没有使用编译资源,那么它很可能已经是一个磁盘文件。只需在文件的绝对路径上调用 popen,而不是使用
:/
语法。编写代码以从资源中提取 myScript.sh 文本文件并将其本地保存到磁盘。然后对保存的文件调用 popen。
关于c++ - 使用参数作为 Qt 资源运行 Bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41136522/