6

私は QT アプリケーションを作成しており、KDE ​​アプリケーション (kdevelop/kate/... を参照) のように QDialog 内に端末 (xterm と言います) を埋め込む必要があります。

私は試してきました: - QX11EmbedContainer を QDialog の QLayout に配置 - 実行したいプログラムの QProcess

QX11EmbedContainer 内で QProcess が実行されていることを期待していますが、機能しません。

問題は、xterm を QX11EmbedContainer に入れることができないことです。得られるのは xterm ウィンドウだけです (残念ながら QDialog から分離されています)。誰かが同じ問題を抱えていますか?

4

2 に答える 2

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() );
于 2008-11-21T21:42:05.667 に答える
0

コンテナーのウィンドウ ID を xterm に渡す必要があります。

QX11EmbedContainer の Qt ヘルプの例を見ると、ウィンドウ ID が 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 ウィンドウ識別子 (10 進数の整数) を指定すると、xterm はそのトップレベルのシェル ウィジェットをそのウィンドウに再ペアレント化します。これは、xterm を他のアプリケーションに埋め込むために使用されます。

于 2008-11-21T03:34:06.813 に答える