我最近遇到一个问题。 我使用QProcess
类启动a.proce
中的B.exe
。 a.pro
的绝对路径是C:/qt/a/a.pro
。 我使用windeployqt
对b.exe
进行打包,并将打包文件夹放在c:/qt/a/b/b.exe
中。
在B.exe
中,程序将生成一个名为test.json
的文件。 test.json
的路径与b.exe
相同。 但我在a.pro
中使用以下代码,test.json
生成的路径与a.pro
相同,但不在C:/qt/a/b
文件夹中:
bool f=QProcess::StartDetached(“。/b/b.exe”);
行代码返回true
。 我认为test.json
应该在C:/qt/a/b
文件夹中生成,而不是在C:/qt/a
中生成。 当我双击b.exe
standlone时,它可以正确生成。 但是当我在a.pro
中使用上面的代码进行调试时,它的工作失败了,它只是创建了一个空文件。
你能帮我吗?
如果您查看QProcess::StartDetached,它的内容如下:
进程将在目录workingdirectory中启动。 如果workingDirectory为空,则从调用进程继承工作目录。
您需要为qprocess
设置工作目录。 当您通过“双击”B.exe来运行它时。 您的操作系统从启动位置设置工作目录,即c:/qt/a/b
。 但是当您从。exe启动它时,它的工作目录是C:/qt/a/
您可以在此处阅读有关QProcess::SetWorkingDirectory的内容。 但是,由于您正在使用QProcess::StartDetached重载运行它,因此只需将Wanded working directory作为参数传递:
bool f = QProcess::startDetached("./B/B.exe", QStringList(), "./B/");