Я думаю понятно, что QProcess не должна быть локальной переменной. А работу с QProcess необязательно в отдельный тред выносить. Просто делаешь process.start в основном потоке и все. Т.к. процесс(например strace) - отдельная программа, то и выполняется он операционной системой как отдельная программа, т.е. QProcess::start не вешает gui.
Если бы вывод был только strace, то да, но основнаяа задача - одновременный запуск strace и lsof, и мне кажется, что их выполнение в одном потоке приведет к вылету, как и случается, если дать обе команды одновременно в терминале.
Исходя из этого, я и подумал, что лучше наверное создавать для каждого свой поток.
Застрял тут я с выводом данных из дочернего потока:
Если в ф-цию output добавить:
C++ (Qt)
emit updateOutput(bytes);
предварительно объявив сигнал в классе thread.
И попробовать выводить данные как-нибудь так:
C++ (Qt)
connect(&th,SIGNAL(updateOutput(QString)),this,SLOT(setOutput(QString)));
где setOutput()
C++ (Qt)
void MainWindow::setOutput(QString msg)
{
ui->textEdit->insertPlainText(msg);
}
Но все равно что-то не то.
Кстати, еще по теме, как корректно завершить поток, чтобы не получалось:
QThread: Destroyed while thread is still running
Оно возникает, насколько я понял из-за того, что приложение завершилось, а поток нет?