Pregunta

Estoy escribiendo una aplicación QT y necesito incrustar un terminal (digamos, xterm) dentro de un QDialog, como alguna aplicación KDE (ver kdevelop / kate / ...).

He estado intentando con: - QX11EmbedContainer colocado en el QLayout de mi QDialog - QProcess para el programa que quiero ejecutar

Espero que el QProcess se ejecute dentro del QX11EmbedContainer, pero no funciona.

El problema es que no puedo poner el xterm en el QX11EmbedContainer, lo único que obtengo es una ventana xterm (desafortunadamente separada de mi QDialog). ¿Alguien tiene el mismo problema?

¿Fue útil?

Solución

Lo siento, he probado tu solución antes de publicar este sitio y no funciona. He resuelto cambiar a kdelibs y usar esas importaciones y 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() );

Otros consejos

Debe pasar la ID de la ventana del contenedor a xterm.

Si mira el ejemplo en la ayuda de Qt para QX11EmbedContainer, simplemente pasa la identificación de la ventana al QProcess. Cambia esto a

 QProcess process(&container);
 QString executable(app.arguments()[1]);
 QStringList arguments;
 arguments << "-into" << QString::number(container.winId());
 process.start(executable, arguments);

donde " -into " ha sido agregado a los argumentos. Desde la página de manual de XTerm:

  

-into windowId

     

Dado un identificador de ventana X (un entero decimal), xterm     reparent su caparazón de nivel superior     widget a esa ventana. Esto es usado     para incrustar xterm en otras aplicaciones.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top