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 тремя способами:

  1. Ничего не делать. Пусть QX11EmbedContainer удали это. Это дитя QX11EmbedContainer и будет удален, когда QX11EmbedContainer удален

  2. Подцепить finished() сигнал к своему собственному deleteLater() слот.

    connect( process, SIGNAL(finished(int,QProcess::ExitStatus)), process, SLOT(deleteLater()) );

  3. Удалите его самостоятельно, сохранив указатель на него, и удалите этот указатель позже.

Как дополнительное примечание, я с подозрением отношусь к первому параметру 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);
Другие вопросы по тегам