【发布时间】:2023-07-11 10:06:01
【问题描述】:
尝试在 QT 控制台应用程序的 main 函数中运行此代码,但它只启动 Blender GUI。这些参数应该开始后台渲染。
我测试了参数是否正确,它们在 CMD 上运行良好。这似乎是搅拌机特有的问题,但我可能错了。似乎,使用 QProcess 它不允许 Blender 使用参数。它在不传递任何参数的情况下启动应用程序。
QProcess myProcess;
QString blender = "C:/Program Files/Blender Foundation/Blender/blender.exe";
QStringList arguments;
arguments << "blender" << "-b" << "E:/my/file.blend" << "-o" << " E:/my/output/folder/"<< "-a";
myProcess.start(blender,arguments);
编辑:
所以浏览 SO,我发现了一些可以工作的东西,但这不是使用 QT 功能。我宁愿找到这样做的QT方式。它本质上是在运行 CMD 并通过 CMD 启动搅拌机。有没有办法使用 QT 做到这一点?
QDir::setCurrent(blender);
system("blender -b E:\\Blender\\BlendSwap\\55510_Ciclos_Town_-_10_Male_Characters\\cidade_ciclos-bonecos.blend -o E:\\Blender\\BlendSwap\\55510_Ciclos_Town_-_10_Male_Characters\\exp\\frame_### -a");
【问题讨论】:
-
愚蠢的问题但是...
arguments中的第一项“搅拌机”是什么? -
不要忘记,如果
QProcess的myProcess实例被销毁,启动的进程将自动终止。为避免这种情况,您可以使用startDetached而不是start或在启动该过程后运行QProcess::waitForFinished()。 -
不,这实际上是一个好点。在 CMD 中,您将 CD 到搅拌机文件夹,“搅拌机”是启动搅拌机的标志。我不知道出了什么问题,但 QProcess 的工作如此不稳定。有时它会启动搅拌机 gui,有时它根本不会启动任何东西。有几次它在 GUI 中启动了实际项目。注意:我一直在试验项目路径的“\”和“/”。似乎它喜欢一个,但我无法重现这个问题。
-
@G 好的,我重现了这个问题。这很奇怪。它不喜欢让它在后台运行的“-b”标志。您在 -b 代码中看到的空间实际上使程序跳过了该标志。长话短说,我实际上可以将我的项目文件作为参数传递,它会运行良好。我唯一的解决方案是运行 CMD 并通过它运行搅拌机吗?
-
@MaxGo 感谢您输入 Max。现在我发现它不喜欢我的论点,我发现 startDetached() 正在启动搅拌机,就像 start() 一样。我尝试阅读文档以获取您的建议,但我不明白它的实际含义是什么? waitForFinished 似乎建议它应该作为一个单独的线程启动,否则它会锁定程序并启动分离我无法理解它的目的。