在QT应用程序中embedded一个应用程序(在这种情况下是一个terminal)

我正在写一个QT应用程序,我需要在QDialog中embedded一个terminal(我们说,xterm),就像一些KDE应用程序(参见kdevelop / kate / …)。

我一直在尝试: – QX11EmbedContainer放置在我QDialog的QLayout – QProcess我想要执行的程序

我期望QProcess在QX11EmbedContainer中运行,但它不起作用。

问题是我不能把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() ); 

您需要将容器的窗口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手册页:

-into windowId

给定一个X窗口标识符(十进制整数),xterm会将其顶层shell小部件重新映射到该窗口。 这用于在其他应用程序中嵌入xterm。