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

时间:2016-04-19 10:50:53

标签: c++ qt

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

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(),但没有发生任何事情。有什么帮助吗?

1 个答案:

答案 0 :(得分:3)

在这种情况下,每次单击按钮都将创建新的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();
    }
}