a incorporação de uma aplicação (neste caso um terminal) dentro de uma aplicação QT
Pergunta
Eu estou escrevendo uma aplicação QT e eu preciso incorporar um terminal (dizemos, xterm) dentro de um QDialog, como uma aplicação do KDE (ver kdevelop / kate /...).
Eu tenho tentado com: - QX11EmbedContainer colocado no QLayout da minha QDialog - QProcess para o programa que eu quero Excecute
Espero que o QProcess execução dentro do QX11EmbedContainer, mas ele não funciona.
O problema é que eu não posso colocar o xterm no QX11EmbedContainer, a única coisa que eu obter é uma janela xterm (infelizmente separado da minha QDialog). Alguém tem o mesmo problema?
Solução
Desculpe, eu tentei sua solução antes de postar oh este site e ele não funciona. Eu resolvi mudar para kdelibs e usando essas importações e este código
#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() );
Outras dicas
Você precisa passar o ID da janela do recipiente para o xterm.
Se você olhar para o exemplo na ajuda Qt para QX11EmbedContainer, ele só passa o ID de janela para o QProcess. Altere isso para
QProcess process(&container);
QString executable(app.arguments()[1]);
QStringList arguments;
arguments << "-into" << QString::number(container.winId());
process.start(executable, arguments);
onde "-into" foi adicionada aos argumentos. A partir da página homem XTerm:
-into windowId
Dado um identificador de janela X (um inteiro decimal), xterm vai reparent sua concha de nível superior Widget para essa janela. Isto é usado para xterm incorporar dentro de outras aplicações.