在QT应用程序中嵌入应用程序(本例中为终端)
问题描述:
我正在编写一个QT应用程序,我需要在QDialog中嵌入一个终端(我们说,xterm),就像一些KDE应用程序一样(请参阅kdevelop/kate/...)。在QT应用程序中嵌入应用程序(本例中为终端)
我一直在试图用: - QX11EmbedContainer放到我了QDialog 的QLayout - QProcess中的我想excecute
我预计QProcess中的QX11EmbedContainer内运行的程序,但它不工作。
问题是我不能把xterm放到QX11EmbedContainer中,我得到的唯一的东西是一个xterm窗口(不幸与我的QDialog分开)。 有没有人得到同样的问题?
答
对不起,我试过你的解决方案之前发布哦这个网站,它不工作。 我已经解决切换到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());
答
您需要将容器的窗口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。