本文介绍了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"});