首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在QT应用程序中嵌入应用程序(在本例中为终端

在QT应用程序中嵌入应用程序(在本例中为终端
EN

Stack Overflow用户
提问于 2008-11-20 14:50:42
回答 2查看 5.2K关注 0票数 6

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

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

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2008-11-21 21:42:06

对不起,我在发帖之前已经尝试过你的解决方案,哦,这个网站不起作用。我已经解决了切换到kdelibs并使用这些导入和以下代码

代码语言:javascript
复制
#include <kparts/part.h>
#include <assert.h>
#include <kde_terminal_interface.h>
#include <kpluginfactory.h>
#include <klibloader.h>

代码语言:javascript
复制
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() );
票数 3
EN

Stack Overflow用户

发布于 2008-11-21 03:34:07

您需要将容器的窗口ID传递给xterm。

如果您查看QX11EmbedContainer的Qt帮助中的示例,它只会将窗口id传递给QProcess。将其更改为

代码语言:javascript
复制
 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嵌入到其他应用程序中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/305523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档