QTアプリケーション内にアプリケーション(この場合は端末)を埋め込む

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

  •  08-07-2019
  •  | 
  •  

質問

QTアプリケーションを書いていますが、KDEアプリケーション(kdevelop / kate / ...を参照)のように、QDialog内に端末(xtermなど)を埋め込む必要があります。

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

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

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

役に立ちましたか?

解決

申し訳ありませんが、このサイトに投稿する前に解決策を試しましたが、機能しません。 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() );

他のヒント

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

QX11EmbedContainerのQtヘルプの例を見ると、ウィンドウIDがQProcessに渡されるだけです。これを

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

where&quot; -into&quot ;;引数に追加されました。 XTermのマニュアルページから:

  

-into windowId

     

Xウィンドウ識別子(10進整数)、xtermを指定     最上位シェルの親を変更します     そのウィンドウへのウィジェット。これが使用されます     xtermを他のアプリケーション内に埋め込む。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top