在 Qt4 中与外部编辑器通信的问题

Posted

技术标签:

【中文标题】在 Qt4 中与外部编辑器通信的问题【英文标题】:Problems communicating with external editor in Qt4 【发布时间】:2009-10-18 06:53:22 【问题描述】:

我正在 Mac OS X 上编写命令行 Qt4 脚本(使用 QCoreApplication)。

我正在使用这段代码改编自 C++ Programming with Qt 4, 2nd ed。页。 313:

QTemporaryFile outFile;
if (!outFile.open())
    return;

QString fileName = outFile.fileName();
QTextStream out(&outFile);
out << initial_text;
outFile.close();

QProcess::execute(editor, QStringList() << fileName);

QFile inFile(fileName);
if (!inFile.open(QIODevice::ReadOnly))
    return;

QTextStream in(&inFile);
QString text = in.readAll();

std::cout << text.toStdString() << std::endl;

当编辑器设置为“/usr/bin/vim”运行上述代码时,会打印“Vim: Warning: Input is not from terminal”,然后 vim 启动 初始文本 (字符串 initial_text);但是,我无法编辑或退出,因为按转义键会在光标位置打印一个蓝色 ^[,类似于其他所有键。

当编辑器改为“/Users/jason/bin/mate”(TextMate 命令行实用程序)时,TextMate 启动,没有初始文本。我可以编辑和保存文档,当我退出时,应用程序会读取初始文本(应该已经被覆盖)。

我很困惑,因为这段代码在一本印刷书中,所以它应该可以工作。我是否为编辑器变量使用了错误的字符串?

【问题讨论】:

【参考方案1】:

您的编辑器“/Users/jason/bin/mate”似乎不支持将文件名作为参数传递。

在您的终端上,尝试以下操作:

echo "Test text" > test.txt  
/Users/jason/bin/mate test.txt

查看它是否打开带有正确文本的编辑器。

【讨论】:

我发现您必须执行“mate -w”才能等待文件关闭。

以上是关于在 Qt4 中与外部编辑器通信的问题的主要内容,如果未能解决你的问题,请参考以下文章

QT4 设计器在信号/槽编辑器中不接受“&”引用和“”空格字符

如何在qt4的文本编辑框中创建多个选择?

Qt4 中的信号和槽

在 iOS 中与文本共享图像

Qt 4.8.7 内存伪影

python 计算在OpenRefine中与维基数据重新调整的术语及其候选者之间的Levensthein编辑距离的方法(https:// gi