본문 바로가기
R&D

오픈소스 한글 입력 문제

by 도승이 2021. 10. 8.

오픈소스 프로그램내 Qt - JS - html - qml 간 연동되는 부분의 한글입력에서 한글입력이 되지않았던 경험에 대한

접근했었던 접근방법을 공유하기위해 작성한다.

 

javascript, html 의 경우

 

접근법 1.

정규표현식으로 막혀있는지 테스트해본다

keyword : RegExp, RegEx 등 (정규표현식 : Regular Expression)

ex) ^[a-zA-Z]

ex) /[ㄱ-ㅎㅏ-ㅣ가-힣]/;

https://gocoding.tistory.com/93

 

자주 쓰이는 정규식(Regular Expression)

전자우편 주소: /^[a-z0-9_+.-]+@([a-z0-9-]+\.)+[a-z0-9]{2,4}$/ URL: /^(file|gopher|news|nntp|telnet|https?|ftps?|sftp):\/\/([a-z0-9-]+\.)+[a-z0-9]{2,4}.*$/ HTML 태그 - HTML tags: /\<(/?[^\>]+)\>/ 전..

gocoding.tistory.com

 

접근법 2. 

keydown, keypress, keyup 이벤트함수에서 필터링 되는지

설명

텍스트창에 입력이 보이는키 대부분은 keypress 이벤트에 걸린다.

그러나 insert , 방향키 , 한글, 메타키(CapsLock, Shift) 등 특수한 키는 keydown 이벤트에만 걸린다.

 

키보드 이벤트 발생 순서

1. 키보드를 누릅니다.

2. keydown 이벤트가 발생합니다.

3. 글자가 입력됩니다.

4. keypress 이벤트가 발생합니다.

5. 키보드에서 손을 뗍니다

6. keyup 이벤트가 발생합니다.

https://dororongju.tistory.com/91

 

[JQuery] 키보드 이벤트 발생 순서 (keydown / keypress 차이)

키보드 이벤트 키보드 이벤트 발생 순서 1. 키보드를 누릅니다. 2. keydown 이벤트가 발생합니다. 3. 글자가 입력됩니다. 4. keypress 이벤트가 발생합니다. 5. 키보드에서 손을 뗍니다 6. keyup 이벤트가

dororongju.tistory.com

이해하기 어렵다면 들어가서 직접 눌러보자.

 

 

 

 

Qt 내에서는

접근법 1.

QWidget::setAttribute(Qt::WA_InputMethodEnabled,true);

https://doc.qt.io/qt-5/qinputmethodevent.html

 

QInputMethodEvent Class | Qt GUI 5.15.6

QInputMethodEvent Class The QInputMethodEvent class provides parameters for input method events. More... Header: #include qmake: QT += gui Inherits: QEvent Public Types Public Functions Detailed Description Input method events are sent to widgets when an i

doc.qt.io

을 적절한 위치에 선언해주면 한글 IME 입력이벤트가 작동된다.

 

접근법 2.

EventFilter 함수를 통한접근

시스템 전체에대한 이벤트를 엿보고 처리해주는 함수가있다.

해당함수에서 막혀있는지 체크

 

나머지 다양한 접근법 , 키워드

한글조합 preedit , commitedit

lineedit, textedit

조합 : composite,synthesize

형식 : UTF8, EUC-KR, onlylatin

교체 : swap,replace,

지역 : Locale , translation

입력이 되지만 보이지않는다면 형식을 찾아보자

ex) vscode 내에서

�ѱ۹���

이런식으로 보인다면 밑에서 UTF-8 <-> EUC-KR 등으로 인코딩하여 다시열기를 해보자.

 

본인의경우는 JS로 보내야할 입력이벤트를 Qt가 가로채서 보내지않아 문제가됐었는데

commitString() , preeditString() 을활용하여 Qt에서 직접 한글입력이벤트를 만들어 JS로 전달해줬다.

이런식으로 일일이 commit, preedit을 활용하여 한글을 하나하나 뜯어보며 코딩할수있었다.

'R&D' 카테고리의 다른 글

딥러닝을 통한 이미지생성과 슈퍼샘플링  (0) 2022.04.29
Video To Image 프로그램  (0) 2022.03.28
포토모자이크 기법  (0) 2022.03.28
[WebRTC] 웹 화면공유, 화상회의  (0) 2021.11.03

댓글