2008-11-20 54 views
6

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

我一直在试图用: - QX11EmbedContainer放到我了QDialog 的QLayout - QProcess中的我想excecute

我预计QProcess中的QX11EmbedContainer内运行的程序,但它不工作。

问题是我不能把xterm放到QX11EmbedContainer中,我得到的唯一的东西是一个xterm窗口(不幸与我的QDialog分开)。 有没有人得到同样的问题?

回答

3

对不起,我试过你的解决方案之前发布哦这个网站,它不工作。 我已经解决切换到kde库,并使用这些进口和验证码

#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

您需要将容器的窗口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。