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

标签 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(),但没有任何反应。有帮助吗?

最佳答案

在这种情况下,每次单击按钮都会创建新的 QProcess 并为其调用启动或终止。不适用于先前创建的 QProcess。 QProcess必须在成员(member)区,像这样:

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();
    }
}

关于c++ - QT:无法在启动/停止按钮中终止 Qprocess,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36716202/

相关文章:

c++ - 使用WIC将QImage编码为png?

c++ - 如何更改 QTextEdit 的设计?

c++ - Qt - 单击展开 QTreeView?

c++ - QTableWidgetDervied::cellChanged

c++ - 无法理解零规则中的 C++11 语法

c++ - 霍尔分区不起作用?

c++ - C中的结构内存布局

qt - 从宿主语言更新 QML 属性需要什么?

c++ - QcustomPlot 不想绘制图形

c++ - 从 DXF 文件中解析不完整的椭圆