Im folgenden Code wird der QProcess durch das Weglassen des waitForFinished()
nicht mehr mit der Ausgabe seines Signals verbunden. Was zum Teufel ist damit falsch? Ist das ein Qt Bug? (5.7). Beachten Sie, dass dieser Code parallel zur Ausführung von QtConcurrent ausgeführt wird. Aber das sollte nichts ändern, oder? Afaik sendet Signale in anderen Threads in Ordnung, obwohl sie in die Warteschlange gestellt werden.QProcess gibt seine Signale nicht aus, wenn er nicht wartetForFinished()
QProcess *process = new QProcess;
process->setReadChannel(QProcess::StandardOutput);
connect(process, &QProcess::readyReadStandardOutput, [](){
qDebug()<< "readyReadStandardOutput";
});
connect(process, &QProcess::stateChanged, [](QProcess::ProcessState state){
qDebug()<< "stateChanged"<< state;
});
connect(process, static_cast<void(QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished),
[=](){
qDebug()<< "finsished";
});
connect(process, static_cast<void(QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished),
[this, process](int exitCode, QProcess::ExitStatus exitStatus){
qDebug()<< "finsished";
if (exitStatus == QProcess::NormalExit && exitCode == 0){
while (process->canReadLine()) {
QString line = QString::fromLocal8Bit(process->readLine());
QRegularExpression regex("\"(.*)\" {(.*)}");
QRegularExpressionMatch match = regex.match(line);
names_.push_back(match.captured(1));
uuids_.push_back(match.captured(2));
}
}
process->deleteLater();
});
process->start("VBoxManage", {"list", "vms"});
process->waitForFinished(); // This line changes everything
qDebug()<< "leftWaitForFinished";
Haben Sie all diesen Code innerhalb einer Lambda-Funktion, die an 'QtConcurrent :: run 'übergeben wird? – Mike