c++ - 使用参数作为 Qt 资源运行 Bash 脚本

标签 c++ bash qt qt-creator

这里是 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 资源系统的任何信息,也不了解 :/ 语法。它期望第一个参数是操作系统可以理解的磁盘路径。

两个选择:

  1. 只需将 myScript.sh 文件作为单独的文件发送并直接执行即可。 (在尝试使脚本成为资源之前您观察到的工作情况)。如果您没有使用编译资源,那么它很可能已经是一个磁盘文件。只需在文件的绝对路径上调用 popen,而不是使用 :/ 语法。

  2. 编写代码以从资源中提取 myScript.sh 文本文件并将其本地保存到磁盘。然后对保存的文件调用 popen。

关于c++ - 使用参数作为 Qt 资源运行 Bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41136522/

相关文章:

c++ - 16 位桌面颜色深度的 BitBlt + UpdateLayeredWindow 和 CreateDIBSection

bash - bash IFS 在这个例子中是如何工作的?

qt - 如何防止 Qt Creator 2.4.1 用空格替换制表符?

c++ - LNK2001 : Unresolved external symbol when using qwt plot in Qt creator

json - 如何通过 QByteArray 以 JSON 形式存储 QPixmap?

c++ - 在没有 WndProc 的情况下运行 win32 事件循环的不同方式的想法?

c++ - 如何在 C++ 中使用指针访问结构的每个元素

c++ - 使用Bazel编译QT应用程序时访问资源

python - Bash:按字节区分大小写的排序命令或使用 python 排序命令对文本文件进行排序

linux - 创建重复文件并重命名