【问题标题】:QProcess not startingQProcess 未启动
【发布时间】:2025-05-06 06:05:02
【问题描述】:

我有以下代码:

proc = new QProcess();
proc->startDetached("C:\\ffmpeg.exe", QStringList() <<"-i"<< "C:\\pics\\frame%d.png"<< "-r"<< "30" << "-vcodec"<< "ffv1" << "C:\\test.avi" );
connect(proc,SIGNAL(finished(int)),this,SLOT(finishedFFMPEG(int)));

由于某种原因,finished() 和 started() 的 SIGNAL 永远不会被调用。正在正确创建 test.avi 文件。

我在这里错过了什么?

【问题讨论】:

    标签: c++ qt ffmpeg qprocess


    【解决方案1】:

    QProcess::startDetached 是一个静态函数。它对QProcess 的实例没有影响。

    请改用QProcess::start

    "C:\pics\frame%d.png" 中的反斜杠也应该转义,或者更好地使用斜杠 ("C:/pics/frame%d.png") 或 C++11 原始文字 (R"(C:\pics\frame%d.png)")。

    【讨论】:

    • QProcess::start 出于某种原因没有做任何事情。 QProcess::startDetached 正确运行进程,但没有调用finished() 和started() 的信号
    • @testus 因为startDetachedproc 无关。它是一个静态函数。正确的语法应该是:QProcess::startDetached( ... ) 。它使您的proc 不受影响。因此,信号将永远不会被发出。
    • 好的,我明白了,但是proc-&gt;start("C:\\ffmpeg.exe", QStringList() &lt;&lt;"-i"&lt;&lt; "C:\\pics\\frame%d.png"&lt;&lt; "-r"&lt;&lt; "30" &lt;&lt; "-vcodec"&lt;&lt; "ffv1" &lt;&lt; "C:\\depth.avi" ); 怎么什么都没做呢?
    • 检查它是否发出started 信号。
    • 它没有。我发现如果我创建一个 QProcess 对象而不是 QProcess* 它将发出信号。但我不能在我的情况下使用 QProcess
    【解决方案2】:

    应该是这样还是用@:

    proc = new QProcess();
    proc->startDetached("C:\\ffmpeg.exe", QStringList() <<"-i"<< "C:\\pics\\frame%d.png "<< "-r"<< "30" << "-vcodec"<< "ffv1" << "C:\\test.avi" );
    connect(proc,SIGNAL(finished(int)),this,SLOT(finishedFFMPEG(int)));
    

    【讨论】:

    • 我之前尝试过 // 但现在我只是删除了第一个参数中的额外空间,现在我的视频正在正确创建。但是,我仍然没有收到 finished() 信号...
    • 这可能会有所帮助*.com/questions/298060/…