QProcess
выделяется в стеке и будет удален, как только он выйдет из области видимости. Это может произойти до того, как завершится дочерний процесс "xterm" (отсюда вывод).
Попробуйте вместо этого выделить QProcess в куче:
QProcess * process = new QProcess(container);
...
process->start(executable, arguments);
Удалить QProcess можно тремя способами:
Ничего не делать. Позвольте QX11EmbedContainer
удалить его. Это дочерний элемент QX11EmbedContainer
и будет удален при удалении QX11EmbedContainer
.
Подключите сигнал finished()
к своему собственному слоту deleteLater()
.
connect( process, SIGNAL(finished(int,QProcess::ExitStatus)), process, SLOT(deleteLater()) );
Удалите его самостоятельно, сохранив указатель на него, и удалите этот указатель позже.
Как дополнительное примечание, я с подозрением отношусь к первому параметру QProcess::start()
. Это должен быть путь к вашему исполняемому файлу и дополнительные аргументы должны быть добавлены в QStringlist
.
QProcess * process = new QProcess(container);
QString executable("xterm"); // perhaps try "/usr/X11/bin/xterm"
QStringList arguments;
arguments << "-into";
arguments << QString::number(container->winId());
proces->start(executable, arguments);