gpt4 book ai didi

c++ - 将Xterm嵌入到C++中的Qt5应用程序中

转载 作者:行者123 更新时间:2023-12-02 10:15:21 26 4
gpt4 key购买 nike

很抱歉,如果它是重复的,但是我找不到关于Qt5的任何东西对我有用。有什么方法可以使用C++将Xterm嵌入Qt应用程序吗?我用python做到了,但是在xterm上(至少在PyQt5上)调整窗口小部件的容器大小是有问题的,换句话说,xterm不调整大小,这是 Not Acceptable 。

所以我想尝试使用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;
};

terminal.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带来的压倒性优势

最佳答案

问题是xterm没有“-embed”命令(我不知道是否有),但必须使用the docs指出的“-into”命令。

另一方面,不必访问tabwidget或不必要地创建QProcess指针。

考虑到上述情况,那么解决方案是:

#ifndef TERMINAL_H
#define TERMINAL_H

#include <QWidget>
#include <QProcess>

class Terminal : public QWidget
{
Q_OBJECT
public:
explicit Terminal(QWidget *parent = nullptr);
private:
QProcess process;
};

#endif // TERMINAL_H
#include "terminal.h"


Terminal::Terminal(QWidget *parent) : QWidget(parent)
{
QStringList qsl = {"-into", QString::number(winId()),
"-bg", "black",
"-fg", "green"};
process.start("/usr/bin/xterm", qsl);
}
Terminal *term = new Terminal;
ui->tabWidget_2->insertTab(0, term, "terminal");

关于c++ - 将Xterm嵌入到C++中的Qt5应用程序中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62177109/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com