2008-11-20 26 views
6

Piszę aplikację QT i muszę osadzić terminal (mówimy, xterm) w QDialog, jak w przypadku niektórych aplikacji KDE (zobacz kdevelop/kate/...).osadzanie aplikacji (w tym przypadku terminalu) w aplikacji QT

Próbowałem z: - QX11EmbedContainer umieszczonej w QLayout mojego QDialog - QProcess programu chcę excecute

spodziewam QProcess działa w QX11EmbedContainer, ale to nie działa.

Problem polega na tym, że nie mogę umieścić xterma w QX11EmbedContainer, jedyne, co otrzymam, to okno xterm (niestety oddzielone od mojego QDialog). Czy ktoś ma ten sam problem?

Odpowiedz

3

Przepraszam, wypróbowałem Twoje rozwiązanie przed opublikowaniem tej witryny i nie działa. mam rozwiązany przełączania kdelibs i stosując te importu i ten kod

#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

Musisz przekazać identyfikator okna pojemnika do xterma.

Jeśli spojrzysz na przykład w pomocy Qt dla QX11EmbedContainer, to po prostu przekazuje identyfikator okna do QProcess. Zmień tę wartość na

gdzie "-into" zostało dodane do argumentów. Od strony XTerm Man:

-into IDOkna

Given identyfikator okno X (liczba dziesiętna), xterm będzie reparent jego skorupa najwyższego poziomu widżet do tego okna. To jest używane do osadzenia xterm w innych aplikacjach.