【发布时间】:2020-06-04 01:23:04
【问题描述】:
对不起,如果它是重复的,但我找不到任何关于 Qt5 对我有用的东西。有没有办法使用 c++ 将 Xterm 嵌入到 Qt 应用程序中?我是用 python 做的,但是在(至少使用 PyQt5)小部件的容器调整大小时调整 xterm 的大小存在问题,换句话说,xterm 不会调整大小,这是不可接受的。
所以我想尝试使用 C++ 使用 Qt。 有效的 Python 代码(简化)是:
class embeddedTerminal(QWidget):
def __init__(self, bg='Black'):
QWidget.__init__(self)
def startXterm(self):
self._start_process('xterm',['-embed', str(int(self.winId())), "-bg", self.bg, "-fg", "green"])
def _start_process(self, prog, args):
child = QProcess()
child.start(prog, args)
embeddedTerminal 的对象后来被插入到 QTab 小部件中:
term = embeddedTerminal()
term.startXterm()
tabwidget.insertTab(index, term, " Some descriptive text")
所以我尝试用 c++ 做类似的事情:
terminal.h:
class Terminal : public QWidget
{
public:
explicit Terminal(Ui::SuperFalcon *ui) ;
~Terminal();
private:
Ui::SuperFalcon *lui;
};
终端.cpp:
Terminal::Terminal(Ui::SuperFalcon *ui) : QWidget()
{
// lui=ui class with all of the Q elements
lui = ui;
QProcess *proc = new QProcess();
int i_wid = lui->tabWidget_2->winId();
QString s_wid = QString::fromStdString(to_string(i_wid));
cout << i_wid << endl;
QStringList qsl = {"-embed", s_wid, "-bg", "black", "-fg", "green"};
// QStringList qsl = {};
proc->start("/usr/bin/xterm", qsl);
}
最后在另一个处理所有他的gui元素的cpp文件中调用它:
Terminal *term = new Terminal(ui);
ui->tabWidget_2->insertTab(0, term, "terminal");
我安装了 xterm,当我使用 {} 空参数调用进程时,它会正常启动 xterm,但是当我发送带有参数的 QStringList qsl 时,它不显示任何内容。
有谁知道如何解决它,我猜窗口 id 可能是问题所在,但我对 c++ 不是很熟悉,尤其是 Qt,它可能会被 PyQt 和 python 压倒
【问题讨论】: