我试着读出在QProcess中执行的命令的输出。我无法在QProcess的已完成信号和已完成的处理程序之间建立连接。我尝试了几种连接到QProcess完成信号的不同方式,但到目前为止还没有成功。我知道进程的执行是因为它在GUI的控制台中打印输出,而流程的完成是因为它从顺序API中传递了waitForFinished方法。
为什么我的代码不按onFinish或onFinishNoPams
标题:
class Test : public QObject
{
Q_OBJECT
public:
Test(QObject *parent = 0);
Q_INVOKABLE void read();
public slots:
void onFinish(int exitCode , QProcess::ExitStatus exitStatus);
void onFinishNoPams();
private:
QProcess *m_process;
};cpp:
Test::Test(QObject *parent)
: QObject(parent)
{}
void Test::read(){
m_process=new QProcess(this);
connect(m_process, SIGNAL(finished(int,QProcess::ExitStatus)), this, SLOT(onFinishNoPams()));
connect(m_process, SIGNAL(finished(int,QProcess::ExitStatus)), this, SLOT(onFinish(int,QProcess::ExitStatus)));
connect(m_process, QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished),
[=](int exitCode, QProcess::ExitStatus exitStatus){
qDebug() << "not reached";
});
connect(m_process, QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished), this,&Test::onFinish);
QString program = "lsusb";
QStringList arguments;
m_process->execute(program,arguments);
m_process->waitForFinished();
qDebug() << "reached";
return;
}
void Test::onFinish(int exitCode , QProcess::ExitStatus exitStatus){
qDebug() << "not reached";
}
void Test::onFinishNoPams(){
qDebug() << "not reached";
QByteArray out=m_process->readAllStandardOutput();
}qml:
import test 1.0
Window {
Test{
id:test
Component.onCompleted: test.read()
}
}发布于 2021-08-31 10:54:11
QProcess::execute()是一个静态方法,它启动外部进程并以阻塞方式等待其完成。这与您的m_process变量无关。您想要使用的是QProcess::start()。
https://stackoverflow.com/questions/68996511
复制相似问题