Я пишу сценарий командной строки Qt4 (используя QCoreApplication) в Mac OS X.
Я использую этот код, адаптированный из 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: Предупреждение: ввод не из терминала», затем vim запускается с исходным текстом (строка initial_text ); однако я не могу отредактировать или выйти, потому что нажатие escape печатает синий ^[ в позиции курсора, как и любая другая клавиша.
Если для редактора установлено значение «/Users/jason/bin/mate» (утилита командной строки TextMate), TextMate запускается без исходного текста. Я могу редактировать и сохранять документ, а когда я выхожу, приложение читает исходный текст (который должен был быть перезаписан).
Я озадачен, поскольку этот код находится в печатной книге, поэтому он должен работать. Я использую неправильные строки для переменной редактора?