2008-11-20 15 views
6

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

he estado tratando con: - QX11EmbedContainer colocado en el QLayout de mi QDialog - QProcess para el programa Quiero excecute

espero que el QProcess funcionamiento dentro de la 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?

Respuesta

3

Disculpa, he intentado con tu solución antes de publicar oh este sitio y no funciona. He resuelto el cambio a kdelibs y el uso de dichas importaciones y el 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()); 
0

Debe pasar el ID de la ventana del contenedor al xterm.

Si mira el ejemplo en la ayuda de Qt para QX11EmbedContainer, simplemente pasa la identificación de la ventana al QProcess. Cambie 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 añadido a los argumentos. Desde la página de hombre XTerm:

-into WindowID

Dado un identificador de ventana X (un entero decimal), xterm será Reparent su concha de nivel superior widget de a esa ventana. Esto se usa para incrustar xterm dentro de otras aplicaciones.

Cuestiones relacionadas