QT:无法在启动/停止按钮中终止 Qprocess

QT: Can't terminate Qprocess in a start/stop push button

本文关键字:按钮 终止 Qprocess 启动 QT      更新时间:2023-10-16

我想创建一个启动/停止按钮来启动和终止进程。这是我的代码:

void MainWindow::on_pushButton_clicked(){
QProcess* ping_process = new QProcess(this);
    if ( this->myTimer->isActive() == true ) {
            this->myTimer->stop();
            ui->pushButton->setText("Start");
           //...
            ping_process->start("ping", QStringList() << "8.8.8.8");
        } else {
            this->myTimer->start(500);
            ui->pushButton->setText("Stop");
            ping_process->terminate();
        }
}

启动过程是成功的,更改按钮的文本也是成功的。但ping_process->terminate();不起作用。我也试过kill()close(),但都没有成功。有什么帮助吗?

在这种情况下,每次点击按钮都将创建新的QProcess并为其调用start或terminate。不适用于以前创建的QProcess。QProcess必须在成员区域,如下所示:

class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = 0);
 ...
private:
...
    QProcess* ping_process;
};
MainWindow::MainWindow(QWidget *parent) :
    ...
    ping_process(nullptr),
    ...
{
    ...
}
void MainWindow::on_pushButton_clicked() {
    if (!ping_process)
    {
        ping_process= new QProcess(this);
    }
    if ( this->myTimer->isActive() == true ) {
        this->myTimer->stop();
        ui->pushButton->setText("Start");
       //...
        ping_process->start("ping", QStringList() << "8.8.8.8");
    } else {
        this->myTimer->start(500);
        ui->pushButton->setText("Stop");
        ping_process->terminate();
    }
}