Qprocess类用于调用外部程序,可以和他们通信。接口建议去看qt官方文档
1.用ui画个简单的界面。
2.获取网卡,提供一个combox供用户选择
QList<QNetworkInterface> list = QNetworkInterface::allInterfaces();//获取网卡放到list中
foreach (QNetworkInterface interface, list) { //取出list节点中的QNetworkInterface
qDebug()<<"Device:" <<interface.name();
ui->devcieList->addItem(interface.name());//添加到combox中
3.点击update时完成修改对应text里的ip,跳转槽后开始编辑代码:
1.初始化一个Qstring对象用来存命令:
QString cmd = "sudo -S ifconfig ";
cmd += ui->devcieList->currentText() + " "; //combox获取网卡
cmd += ui->inputip->text();
cmd += " netmask 255.255.255.0";
cmd += " \n";
qDebug() << "cmd" <<cmd;
2.声明一个Qprocess对象用来进行shell命令执行
QProcess process;
process.setProcessChannelMode(QProcess::MergedChannels);
process.start("bash");
if(!process.waitForStarted())
{
qDebug() << "Failed to start process";
return;
}
process.write(cmd.toUtf8());
process.waitForBytesWritten();
QString passwd = ui->passwd->text() + "\n"; //text上读取密码
process.write(passwd.toUtf8());
process.waitForBytesWritten();
process.closeWriteChannel();
process.waitForFinished();
QString output = process.readAll();
qDebug() << "output:" <<output;
setProcessChannelMode:设置process信道模式;
start:在新进程中启动给定程序,bash进入linux shell执行步骤;不阻塞状态;
write:开始读cmd中的命令行。
waitforBytesWritten:阻塞等待write结束。