'start' is deprecated,Qt开发中新版QProcess的start到底该怎么用?

'start' is deprecated,Qt开发中新版QProcess的start到底该怎么用?

admin
7月30日发布
温馨提示:
本文最后更新于2025年07月30日,已超过90天没有更新,若内容或图片失效,请留言反馈。

本文介绍了Qt开发中QProcess::start()方法被标记为废弃(deprecated)后的替代方案,帮助开发者正确使用新版API。文章详细讲解两种推荐方法:一是使用带参数列表的start(program, arguments),适用于需要传递参数的情况。二是使用setProgram() + start(),适用于更灵活的场景。同时提供代码示例,帮助Qt初学者快速适应新版API,优化进程启动方式,提升代码可维护性。

在写一个Qt程序的时候,按照B站的教程直接写的进程start,但是提示这个方法已经被deprecated('start' is deprecated. QProcess::start(const QString &program, const QStringList &arguments, QIODevice::OpenMode mode = ReadWrite)),虽然帮助文档已经写的很清楚了,但是作为一名初学者,还是想写个笔记mark一下。

出现这个报错的提示

修复这个问题有两个选择:

(1)一个是使用带参数列表的 start 函数。从提示看,后面已经写到const QStringList,也就是要跟个参数列表。


void Widget::on_CommitButton_clicked()
{
    // 获取lineedit数据
    QString program = ui->cmdlineEdit->text();
    // 创建process对象
    QProcess *myProcess = new QProcess(this);
    myProcess->start(program, QStringList());  // 传入空参数列表
}

(2)使用 setProgram 和 start 分开的方式。


void Widget::on_CommitButton_clicked()
{
    // 获取lineedit数据
    QString program = ui->cmdlineEdit->text();
    // 创建process对象
    QProcess *myProcess = new QProcess(this);
    myProcess->setProgram(program);
    myProcess->start();
}

推荐使用第一种方式,因为它更简洁。如果你需要传递参数给程序,可以在 QStringList 中添加参数。这种改变是为了让进程启动的API更加明确和灵活,特别是在需要传递参数的情况下。例如:

myProcess->start("program", {"arg1", "arg2", "arg3"});
© 版权声明
THE END
喜欢就支持一下吧
点赞 0 分享 赞赏
评论 抢沙发
上传图片
OωO
取消