У меня есть приложение GUI, которое создает внутри QProcess
, выхватывает его вывод и показывает его на форме. Мне нужно как-то уловить ключевые события из формы, чтобы передать их QProcess
(чтобы сделать это как можно ближе к реальному оконечному окну).Каков рекомендуемый способ передачи событий keyboad в QProcess прозрачно?
Итак, я полагаю, я должен обрабатывать keyReleaseEvent()
и каким-то образом преобразовать либо event.text()
(который QString
) или event.key()
(который int
) аргументу, подходит для process.write()
(который принимает char*
или QByteArray
). Есть ли рекомендуемый способ сделать такое преобразование (с учетом проблем локализации, модификаторов ctrl/alt/shift и т. Д.)? Я действительно не хочу строить какое-то сопоставление от key()
возвращаемых значений до char*
строк; и text()
капель модификаторов.
Кроме того, если я начну процесс с командой bash -c sudo something
в QProcess, он выходит мгновенно, жалуясь, что «нет TTY присутствует и ни одна программа askpass не указано», так что я могу делать что-то совершенно неправильно ...
Просто комментируйте, так как это не отвечает на главный вопрос. Чтобы решить проблему «no tty ...», вы можете убедиться, что вы задали переменную среды SUDO_ASKPASS с помощью QProcess :: setEnvironment (http://doc.trolltech.com/4.6/qprocess.html#setEnvironment). Он должен быть установлен на путь запускаемой программы, которая принимает аргумент (приглашение) и записывает пароль в стандартный вывод. – imaginaryboy
Я бы предпочел не устанавливать некоторые эзотерические переменные для каждой сверхпараноидальной программы ... Надеюсь, существует общий способ заставить мой QProcess вести себя точно так же, как приложение терминала. – fjarri