我正在编写一个QT应用程序,我需要在QDialog中嵌入一个终端(我们说,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。

如果你看一下QX帮助QX11EmbedContainer中的例子,它只是将窗口id传递给QProcess。将其更改为

 QProcess process(&container);
 QString executable(app.arguments()[1]);
 QStringList arguments;
 arguments << "-into" << QString::number(container.winId());
 process.start(executable, arguments);

其中<!> quot; -into <!> quot;已添加到参数中。从XTerm手册页:

  

-into windowId

     

给出一个X窗口标识符(十进制整数),xterm     将重新审视其顶级shell     小窗口到那个窗口。这是用的     将xterm嵌入其他应用程序中。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top