встраивание приложения (в данном случае терминала) в приложение QT
Я пишу приложение QT, и мне нужно встроить терминал (скажем,xterm) в QDialog, как и некоторые приложения KDE (см. kdevelop/kate/...).
Я пытался с: - QX11EmbedContainer помещен в QLayout моего QDialog - QProcess для программы, которую я хочу excecute
Я ожидаю, что QProcess работает в QX11EmbedContainer, но он не работает.
проблема в том, что я не могу поместить xterm в QX11EmbedContainer, единственное, что я получаю, это окно xterm (к сожалению, отделенное от моего QDialog). У кого-нибудь такая же проблема?
2 ответов
Извините, я пробовал ваше решение перед публикацией на этом сайте, и оно не работает. Я решил перейти на kdelibs и использовать этот импорт и этот код
#include <kparts/part.h>
#include <assert.h>
#include <kde_terminal_interface.h>
#include <kpluginfactory.h>
#include <klibloader.h>
KLibFactory* factory = KLibLoader::self()->factory( "libkonsolepart" );
KParts::Part* p = static_cast<KParts::Part*>(factory->create( this,"tralala",
QStringList() << "dio") );
assert(p);
setCentralWidget( p->widget() );
TerminalInterface *t = qobject_cast<TerminalInterface*>(p);
t->showShellInDir( QDir::home().path() );
вам нужно передать идентификатор окна контейнера xterm.
Если вы посмотрите на пример в справке Qt для QX11EmbedContainer, он просто передает идентификатор окна QProcess. Измените это на
QProcess process(&container);
QString executable(app.arguments()[1]);
QStringList arguments;
arguments << "-into" << QString::number(container.winId());
process.start(executable, arguments);
где" - into " было добавлено к аргументам. Из справочной страницы XTerm:
-в windowId
учитывая идентификатор окна X (десятичное целое число), xterm будет reparent его оболочки верхнего уровня виджет для этого окно. Это используется для внедрения xterm в другие приложения.