有没有人可以帮我读qprocess的输出,在写和循环之后,直到所有的任务都完成?我有这个代码
wifi->write("scan\n");
wifi->closeWriteChannel();
wifi->waitForBytesWritten(100);
wifi->waitForReadyRead(100);
wifi->waitForFinished(100);
qDebug() << "read output" << wifi->readAllStandardOutput();
wifi->write("scan\n");
wifi->closeWriteChannel();
wifi->waitForBytesWritten(100);
wifi->waitForReadyRead(100);
wifi->waitForFinished(100);
qDebug() << "read output" << wifi->readAllStandardOutput();预期输出必须为
"OK“
“扫描结果”
但是输出结果是
"OK“
"“
谢谢。
发布于 2014-03-28 14:17:29
你的多次等待没有任何用处。您所关心的是进程何时结束,因此使用一个超时更长的waitForFinished调用(这些扫描不会在大约100ms内发生,几秒钟是一个好的最小值)。
您不应该使用阻塞waitForXxx方法。他们把每个人都绊倒了,是无休止的悲伤的源泉。忘记它们的存在。使用进程的信号在事件发生时对其做出反应。
Qt 5+ C++11
这就是前进的方向。这就是为什么您应该坚持使用现代开发环境,如果可以的话。它打字更少,更容易理解。
void MyObject::startWifi() {
auto process = new QProcess(this);
process->start("program", QStringList() << "argument");
connect(process, &QProcess::started, [process]{
process->write("scan\n");
process->closeWriteChannel();
});
connect(process, &QProcess::finished, [process]{
qDebug() << process->readAllStandardOutput();
process->deleteLater();
});
}Qt 4
class MyObject : public QObject {
Q_OBJECT
QProcess m_wifi;
Q_SLOT void onStarted() {
m_wifi.write("scan\n");
m_wifi.closeWriteChannel();
}
Q_SLOT void onFinished() {
qDebug() << m_wifi.readAllStandardOutput();
}
public:
MyObject(QObject * parent = 0) : QObject(parent) {
connect(&m_wifi, SIGNAL(started()), SLOT(onStarted()));
connect(&m_wifi, SIGNAL(finished(int,QProcess::ExitStatus)),
SLOT(onFinished()));
}
Q_SLOT void start() {
m_wifi.start("program", QStringList() << "argument");
}
};然后在该对象的一个实例上调用start方法/插槽。就这样。
https://stackoverflow.com/questions/22705335
复制相似问题