Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Qt/C++;:用按钮任意中断QProcess(模拟^c)_Android_C++_Qt_Adb_Logcat - Fatal编程技术网

Android Qt/C++;:用按钮任意中断QProcess(模拟^c)

Android Qt/C++;:用按钮任意中断QProcess(模拟^c),android,c++,qt,adb,logcat,Android,C++,Qt,Adb,Logcat,因此,我需要制作一个执行“adb logcat”命令的Qt应用程序(带有GUI)(在按下^c之前一直生成该日志)。 我需要一个GUI按钮来停止进程并将输出传递到文本浏览器。 这是我用来获取QProcess输出的代码: QProcess process; process.start("adb logcat"); process.waitForFinished(-1); QByteArray logcatOut = process.readAllStandardOutput(); ui->de

因此,我需要制作一个执行“adb logcat”命令的Qt应用程序(带有GUI)(在按下^c之前一直生成该日志)。 我需要一个GUI按钮来停止进程并将输出传递到文本浏览器。 这是我用来获取QProcess输出的代码:

QProcess process;
process.start("adb logcat");
process.waitForFinished(-1);
QByteArray logcatOut = process.readAllStandardOutput();
ui->devicesOutput->setText(logcatOut);
感谢您使用停止运行应用程序进程。waitForFinished(-1)

将阻止您的程序进一步执行,直到过程“adb”完成。 因此,您的GUI将被冻结

  • 您应该将QProcess process定义为类变量。使用QProcess *过程;而不是在堆栈上创建它。(所有QObject衍生产品的最佳实践)

  • 声明一个插槽,用于处理按钮的单击信号

  • 在插槽中调用进程->终止()


  • 我尝试了评论过程。waitForFinished(-1);在其他更简单的命令(adb设备)中,由于某种原因,文本没有传递到文本浏览器,当我按下按钮时,控制台会说:“QProcess:在进程(“adb”)仍在运行时销毁。”@GabMus:请实现我回答的第1点!您应该使用:process=newqprocess(this);进程->启动(“adb日志”)。。。其中,流程在GUI的.h文件中定义为:QProcess*process;在您的示例中,您在堆栈上创建流程对象(不要使用QObject!),因此一旦执行离开范围,流程对象就会被删除。试着理解术语“heap”和“stack”,以及在heap和stack上创建变量>使用QProcess*进程意味着什么;而不是在堆栈上创建它。(所有QObject衍生产品的最佳实践)不,根本没有此类最佳实践。这是不正确的。