Проблемы при общении с внешним редактором в Qt4

Я пишу сценарий командной строки 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 запускается без исходного текста. Я могу редактировать и сохранять документ, а когда я выхожу, приложение читает исходный текст (который должен был быть перезаписан).

Я озадачен, поскольку этот код находится в печатной книге, поэтому он должен работать. Я использую неправильные строки для переменной редактора?


person titaniumdecoy    schedule 18.10.2009    source источник


Ответы (1)


Кажется, ваш редактор "/Users/jason/bin/mate" не поддерживает передачу имени файла в качестве аргумента.

С вашего терминала попробуйте что-то вроде:

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

Чтобы увидеть, открывает ли он редактор с правильным текстом.

person Jean Regisser    schedule 22.10.2009
comment
Я понял, что вам нужно выполнить mate -w, чтобы дождаться закрытия файла. - person titaniumdecoy; 23.10.2009