2008-11-20 11 views
6

Ich schreibe eine QT-Anwendung und ich muss ein Terminal (wir sagen, xterm) in einem QDialog, wie einige KDE-Anwendung (siehe kdevelop/kate/...).Einbetten einer Anwendung (in diesem Fall ein Terminal) innerhalb einer QT-Anwendung

Ich habe versucht, mit: - QX11EmbedContainer in die QLayout platziert meiner QDialog - QProcess für das Programm, das ich

Ich erwarte, dass die QProcess läuft im QX11EmbedContainer excecute wollen, aber es funktioniert nicht.

Das Problem ist, dass ich das Xterm nicht in den QX11EmbedContainer legen kann, das einzige, was ich bekomme, ist ein Xterm-Fenster (leider getrennt von meinem QDialog). Hat jemand das gleiche Problem?

Antwort

3

Entschuldigung, ich habe Ihre Lösung vor der Veröffentlichung dieser Website versucht und es funktioniert nicht. Ich habe die Umstellung auf kdelibs gelöst und unter Verwendung dieser Importe und diesen 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()); 
0

Sie müssen die Fenster-ID des Containers an den Xterm übergeben.

Wenn Sie sich das Beispiel in der Qt-Hilfe für QX11EmbedContainer ansehen, übergibt es einfach die Fenster-ID an den QProcess. Ändern Sie diesen Wert in

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

wobei "-into" zu den Argumenten hinzugefügt wurde. Vom XTerm- man page:

-INTO windowId

einem X-Fenster-Identifizierer (eine Dezimalzahl) Da, xterm wird seine Top-Level-Shell Widget auf dieses Fenster Reparent. Dies wird verwendet, um Xterm in andere Anwendungen einzubetten.