a incorporação de uma aplicação (neste caso um terminal) dentro de uma aplicação QT

StackOverflow https://stackoverflow.com/questions/305523

  •  08-07-2019
  •  | 
  •  

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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top