从 Qt 应用程序运行命令行 dot 程序没有输出,这是什么问题?

问题描述

我有一个应用程序可以生成一个 dependencies.dot 文件,然后我想将其转换为 SVG 图像。

当我从一个简单的应用程序中这样做时:

int main(int argc,char * argv[])
{
    system("dot -Tsvg ../BUILD/dependencies.dot > ../BUILD/dependencies.svg");

    return 0;
}

效果很好。 SVG 图像存在并且可以正常工作。

当我从 Qt 应用程序运行它时,SVG 文件被创建,但它仍然是空的。

知道什么会阻止 dot 将数据输出到它的 stdout 吗?

为了以防万一,我还尝试使用 cat 通过 stdin 而不是文件名发送输入:

system("cat ../BUILD/dependencies.dot | dot -Tsvg > ../BUILD/dependencies.svg");

这没有任何区别。

同样使用完整路径 (/usr/bin/dot) 也无济于事。

一个测试,我尝试使用 popen() 并且第一个 fread() 立即返回 0(即 EOF 的标记)。

它可能不是 Qt,但某些东西正在与 dot 做任何事情的能力相互作用。关于为什么会很棒的任何指示。

也许是一个重要的笔记?我启动我的应用程序。从控制台,所以 stdinstdoutstderr 都应该按预期工作。我实际上可以看到调试日志出现在那里,其他应用程序似乎按预期工作(例如,我的 Qt 应用程序可以成功运行 make)。

以下是生成的 SVG 示例(当我不在 Qt 应用程序中运行它时):

enter image description here

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)