2008-11-20 6 views
6

Я пишу приложение QT, и мне нужно встроить терминал (скажем, xterm) в QDialog, например, какое-нибудь приложение KDE (см. Kdevelop/kate/...).вложение приложения (в данном случае терминала) в приложение QT

Я пытался с: - QX11EmbedContainer помещается в QLayout моего QDialog - QProcess для программы я хочу Выполнение выражений

Я ожидаю, что QProcess работает в QX11EmbedContainer, но он не работает.

Проблема в том, что я не могу поместить xterm в QX11EmbedContainer, единственное, что я получаю, это окно xterm (к сожалению, отделяется от моего QDialog). У кого-то такая же проблема?

ответ

3

Извините, я пробовал ваше решение, прежде чем публиковать этот сайт, и он не работает. Я решил переключиться на kdelibs и использования этих импорта и этот код

#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

Вам необходимо передать идентификатор окна контейнера в xterm.

Если вы посмотрите на пример справки Qt для QX11EmbedContainer, он просто передает идентификатор окна в QProcess. Измените это на

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

где «-into» добавлено к аргументам. На странице XTerm людей:

WindowID

Учитывая идентификатор X Window (десятичное целое число), Xterm будет его верхним изменит родитель уровня оболочка виджета к этому окну. Это используется для вставки xterm в другие приложения.