Каков рекомендуемый способ прозрачной передачи событий keyboad в QProcess? - PullRequest
0 голосов
/ 05 декабря 2009

У меня есть приложение с графическим интерфейсом, которое создает QProcess внутри, ловит его вывод и показывает его в форме. Мне нужно как-то перехватить ключевые события из формы, чтобы передать их в 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», поэтому я могу что-то делать совершенно неправильно ...

1 Ответ

2 голосов
/ 05 декабря 2009

Проблема заключается не только в том, чтобы решить, что записать в процесс.

Вы не можете эмулировать терминал, просто читая / записывая stdout / stdin процесса, это более сложно, чем это. Подумайте о программе less или о любом пейджере, например. Откуда он знает, сколько строк печатать за раз? Требуется информация о терминале, который не представлен через stdin / stdout / stderr.

Эмуляция терминала выходит за рамки QProcess. Если вы действительно уверены, что вам нужно сделать это, используйте в качестве отправной точки какой-нибудь существующий эмулятор терминала на основе Qt (например, Konsole).

...