6

我正在编写一个 QT 应用程序,我需要在 QDialog 中嵌入一个终端(我们说,xterm),就像一些 KDE 应用程序(参见 kdevelop/kate/...)。

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

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

问题是我无法将 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 窗口标识符(一个十进制整数),xterm 会将其顶级 shell 小部件重新设置为该窗口。这用于在其他应用程序中嵌入 xterm。

于 2008-11-21T03:34:06.813 回答