QT的QProcess 如何执行命令行?这个命令行中的参数中有双引号和中文。

发布于 2022-09-04 22:20:46 字数 559 浏览 13 评论 0

QT框架。
下面这样的命令如何用QProcess 来调用?

ffmpeg -f gdigrab -r 25 -video_size 1366x768 -i desktop -f dshow -list_devices 0 -i video="Integrated Webcam":audio="麦克风 (Realtek Audio)" -filter_complex "[0:v] scale=1366x768 [desktop]; [1:v] scale=192x108 [webcam]; [desktop][webcam] overlay=x=W-w-50:y=H-h-50" d:\output8.mp4

上面这条命令本生是没有问题的,在windows的cmd下可以正常执行。

    QProcess p(0);
    p.start("ffmpeg -f ........此处即为上面那个命令.......");
    

但在QT中用QProcess始终没有成功。当我把含有双引号和中文的部分参数去掉后,可以成功运行命令。一旦参数含有双引号,就运行失败。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

风轻花落早 2022-09-11 22:20:46

以前用的一段代码

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);
 
    QTime time;
    time.start();
    QProcess process;
//    process.start("J:\\NBTSCAN\\nbtscan.exe", QStringList() << "172.17.78.0/24");
//    process.start("J:\\NBTSCAN\\nbtscan.exe -v -s : 172.17.78.0/24");
    process.start("J:\\NBTSCAN\\command\\nbtscan.exe", QStringList() << "-v" << "-s" << ":" << "172.17.78.0/24");
 
    qDebug() << process.arguments();
 
    process.waitForFinished();
 
    while (process.canReadLine()) {
        qDebug() << process.readLine().trimmed();
    }
 
    qDebug() << "Using " << time.elapsed();
 
    return app.exec();
}
临风闻羌笛 2022-09-11 22:20:46

Qt4的文档里边明确说过(Qt5没有关注过),如果参数带引号,你用QProcess的时候,三个引号代表一个参数里边的引号

疑心病 2022-09-11 22:20:46

如果编译器支持C++11的化,可以试试这样写你的命令行:R"xxx(将这句中文替换为你要执行的命令行)xxx"
即字符串左边用Rxxx"(包裹,右边用)xxx"包裹,其中xxx可以替换为任意你的命令行中不存在的字符串
如果要处理中文,VS下(源码是BGK之类的)则可以用QString::fromLocal8Bit(R"(将这句中文替换为你要执行的命令行)");
如果是QtCreator下(也就是源码是UTF8格式的时候)用QString::fromUtf8(R"(将这句中文替换为你要执行的命令行)")

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文