incorporer une application (dans ce cas un terminal) dans une application QT
Question
J'écris une application QT et je dois intégrer un terminal (disons, xterm) dans un QDialog, comme une application KDE (voir kdevelop / kate /...).
J'ai essayé avec: - QX11EmbedContainer placé dans QLayout de mon QDialog - QProcess pour le programme que je veux exécuter
Je m'attends à ce que le processus QProcess s'exécute dans QX11EmbedContainer, mais cela ne fonctionne pas.
Le problème est que je ne peux pas placer le xterm dans le QX11EmbedContainer, la seule chose que j’obtiens est une fenêtre xterm (malheureusement séparée de mon QDialog). Est-ce que quelqu'un a le même problème?
La solution
Désolé, j'ai essayé votre solution avant de poster oh ce site et cela ne fonctionne pas. J'ai résolu de passer à kdelibs et d'utiliser ces importations et ce code
#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() );
Autres conseils
Vous devez transmettre l'ID de fenêtre du conteneur à xterm.
Si vous consultez l'exemple de l'aide de Qt pour QX11EmbedContainer, il ne fait que passer l'identifiant de fenêtre à QProcess. Changez ceci en
QProcess process(&container);
QString executable(app.arguments()[1]);
QStringList arguments;
arguments << "-into" << QString::number(container.winId());
process.start(executable, arguments);
où & -into " a été ajouté aux arguments. Sur la page de manuel XTerm:
-dans windowId
Étant donné un identifiant de fenêtre X (un entier décimal), xterm reparent sa coquille de niveau supérieur widget à cette fenêtre. Ceci est utilisé intégrer xterm dans d'autres applications.