incorporare un'applicazione (in questo caso un terminale) all'interno di un'applicazione QT

StackOverflow https://stackoverflow.com/questions/305523

  •  08-07-2019
  •  | 
  •  

Domanda

Sto scrivendo un'applicazione QT e devo incorporare un terminale (diciamo, xterm) in un QDialog, come alcune applicazioni KDE (vedi kdevelop / kate / ...).

Ho provato con: - QX11EmbedContainer inserito nel QLayout del mio QDialog - QProcesso per il programma che voglio eseguire

Mi aspetto che QProcess sia in esecuzione all'interno di QX11EmbedContainer, ma non funziona.

Il problema è che non riesco a inserire xterm in QX11EmbedContainer, l'unica cosa che ottengo è una finestra xterm (purtroppo separata dal mio QDialog). Qualcuno ha lo stesso problema?

È stato utile?

Soluzione

Mi dispiace, ho provato la tua soluzione prima di pubblicare su questo sito e non funziona. Ho risolto il passaggio a kdelibs e l'utilizzo di tali importazioni e questo codice

#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() );

Altri suggerimenti

È necessario passare l'ID della finestra del contenitore a xterm.

Se guardi l'esempio nella guida di Qt per QX11EmbedContainer, passa semplicemente l'id della finestra a QProcess. Cambia questo in

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

dove " -into " è stato aggiunto agli argomenti. Dalla pagina man di XTerm:

  

-in windowId

     

Dato un identificatore della finestra X (un numero intero decimale), xterm     sostituirà la sua shell di livello superiore     widget per quella finestra. Questo è usato     per incorporare xterm in altre applicazioni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top