QX11EmbedContainer и проблема QProcess
Я пытался вставить QX11EmbedContainer в свое приложение, и мне нужно запустить в нем терминал (потому что с konsolepart я практически ничего не могу сделать).
QX11EmbedContainer* container = new QX11EmbedContainer(this); // with or without "this" I got the same result
container->show();
QProcess process(container);
QString executable("xterm -into ");
QStringList arguments;
arguments << QString::number(container->winId());
process.start(executable, arguments);
Компиляция идет хорошо, но я получил это сообщение:
QProcess: Destroyed while process is still running.
и я не могу видеть контейнер, предложения?????? Спасибо
1 ответ
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);