QProcess在VBScript失败时不会发出错误

时间:2016-07-25 15:19:37

标签: qt signals qprocess

我有一个将Excel文件转换为制表符分隔文本文件的VBScript:

format = -4158

Set objFSO = CreateObject("Scripting.FileSystemObject")

src_file = objFSO.GetAbsolutePathName(Wscript.Arguments.Item(0))
dest_file = objFSO.GetAbsolutePathName(WScript.Arguments.Item(1))

Dim oExcel
Set oExcel = CreateObject("Excel.Application")

oExcel.DisplayAlerts = False
oExcel.ProtectedViewWindows.Open(src_file)
oExcel.ActiveProtectedViewWindow.Edit

Dim oBook
Set oBook = oExcel.Workbooks.Open(src_file)

oBook.Worksheets(5).Activate

oBook.SaveAs dest_file, format

oBook.Close False
oExcel.DisplayAlerts = True
oExcel.Quit

在Qt中,我使用wscript运行此代码,并将信号QProcess :: errorOccurred连接到lambda:

QObject::connect(&wscript, &QProcess::errorOccurred, [=](QProcess::ProcessError error)
{

  qDebug() << "Error has occured";

});

在我的VB脚本中,删除了受保护的视图。但是,我修改了脚本,以便它不会禁用受保护的视图。这导致我的脚本无法打开受保护视图中的Excel文件,这导致错误,指示无法打开Excel文件。但是,永远不会发送errorOccured信号。为什么会这样?

1 个答案:

答案 0 :(得分:3)

仅在Process::errorOccured本身出现问题或正在运行的进程崩溃时才会发出QProcess信号(请参阅原因here)。

如果您希望VB脚本以某种方式通知您的应用程序错误,那么您的脚本必须使用非零退出代码,可以通过QProcess::exitCode读取,或写入其标准错误可以在QProcess::readyReadStandardError信号上捕获和读取的流。