如何使用 QProcess 运行 vim 终端
Posted
技术标签:
【中文标题】如何使用 QProcess 运行 vim 终端【英文标题】:How to run vim terminal with QProcess 【发布时间】:2016-11-16 11:10:07 【问题描述】:我想做“vim”命令,“vim”命令用于在linux中打开一个新的编辑器。 "setup.csh" 用 QProcess 打开文件 "vi" 编辑器。我想使用 gui 运行这个命令。
linux终端命令:“vim /home/intern2/elif/Project/setup.csh”。我怎样才能运行这个命令gui
我在 Qt 中编写了以下命令,但使用 QProcess 无法正常工作。
QProcess *process1=new QProcess(this);
process1->start("vim" , QStringList() <<"/home/intern2/elif/Project/setup.csh");
process1->waitForBytesWritten();
process1->waitForFinished();
ui->textEdit_3->append(process1->readAllStandardOutput());
不幸的是,我给出了以下错误信息
错误信息:
Warning: Output is not a terminal
Warning: Input is not from a terminal
【问题讨论】:
你想打开一个新的终端窗口吗?如果是这样,您需要实际指定终端应用程序,如process1->start("xterm" , QStringList() <<"-e" << "vim"<< "/home/intern2/elif/Project/setup.csh");
。如果你想要文件内容,你应该改用cat
(或者实际上你应该用QFile
打开文件,在GUI后面打开shell程序应该小心处理),所以process1->start("cat" , QStringList() <<"/home/intern2/elif/Project/setup.csh");
?
谢谢你,我按我的意愿工作了@PeterT
【参考方案1】:
我得到了它的工作:
QProcess* process = new QProcess();
qint64* processId = new qint64();
process->startDetached("/usr/bin/vim", QStringList(), QString(), processId);
// Wait for process to be closed by user (kill()
// does not actually kill the process, but tests if it exists)
while (kill(*processId, 0) == 0)
// Done
delete processId;
delete process;
不要忘记为kill()
函数添加#include <signal.h>
。
【讨论】:
以上是关于如何使用 QProcess 运行 vim 终端的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 QProcess 同时运行多个 python 脚本