2009-12-05 3 views
0

나는 내부에 QProcess을 생성하는 GUI 응용 프로그램을 가지고 있으며 출력을 포착하여 양식에 표시합니다. 나는 어떻게 든 그것들을 QProcess으로 전달하기 위해 양식에서 키 이벤트를 잡아야한다 (가능한 한 실제 터미널 창에 가깝게 만들기 위해).keyboad 이벤트를 QProcess에 투명하게 전달하는 권장 방법은 무엇입니까?

그래서, 나는 (char* 또는 QByteArray 소요되는) process.write()에 적합, 내가 인수 (int 인) (QString 인) 또는 event.key() 중 하나 event.text() 변환 어떻게 든 keyReleaseEvent()를 처리해야하고, 가정합니다. 그러한 변환을 수행하는 몇 가지 권장 방법이 있습니까? (현지화 문제, ctrl/alt/shift 수정 자 등을 고려해야합니다.) 나는 실제로 어떤 종류의 매핑을 구성하고 싶지 않다. key() 반환 값은 char* strings이다. text() 수식어를 삭제합니다.

또한 내가 QProcess에서 명령 bash -c sudo something와 프로세스를 시작하는 경우, 그것은 "더 청각 장애의 존재없이 askpass 프로그램이 지정되지"불평, 즉시 종료, 그래서 나는

+1

주요 문제에 대한 답변이 없으므로 댓글을 달아주세요. "no tty ..."문제를 해결하기 위해 QProcess :: setEnvironment (http://doc.trolltech.com/4.6/qprocess.html#setEnvironment)를 사용하여 SUDO_ASKPASS 환경 변수를 설정할 수 있습니다. 인수 (프롬프트)를 취하고 암호를 표준 출력에 기록하는 프로그램 실행 경로로 설정해야합니다. – imaginaryboy

+0

각 지나치게 편집 성있는 프로그램에 대해 몇 가지 난해한 변수를 설정하는 것을 선호하지 않습니다 ... QProcess가 터미널 응용 프로그램과 똑같이 작동하도록하는 일반적인 방법이 있기를 바랍니다. – fjarri

답변

2

... 문제를 완전히 잘못 일을 할 수있다 프로세스에 쓸 내용을 결정하는 것 이상입니다.

프로세스의 stdout/stdin을 읽고 쓰는 것만으로는 터미널을 에뮬레이션 할 수 없습니다. 예를 들어 less 프로그램이나 모든 호출기를 생각해보십시오. 한 번에 몇 줄을 인쇄해야하는지 어떻게 알 수 있습니까? stdin/stdout/stderr로는 표시되지 않는 터미널에 대한 정보가 필요합니다.

터미널을 에뮬레이트하는 것은 QProcess의 범위를 벗어납니다. 이 작업을 수행해야하는 경우 기존 Qt 기반 터미널 에뮬레이터를 시작점 (예 : Konsole)으로 사용하십시오.

+0

예, Konsole은 내가 원하는 것을 정확하게하는 것처럼 보입니다 ... 아마도 그 부분을 잘라야 할 것입니다) – fjarri