페이지

2016년 3월 19일 토요일

pvdevelop 프로젝트 -UI 편집 방법 - TabWidget 위젯 사용법

탭 위젯에 대해 알아보자. 하지 싫어서 그런가. 갈수록 글이 짧아지네요.

그림 1. 탭 위젯 GUI 화면
GUI 작화 화면에 탭 위젯을 삽입해 보았다.
툴박스의 경우 기본적으로 두개의 아이템을 넣으라고 하는데 이것은 하나 밖에 넣어달라고 하지 않는다.
%탭 위젯 작화 방법은 툴 박스와 거의 동일합니다. 자세한 것은 탭 위젯을 참조하시기 바랍니다.

위젯위젯 이름높이
TabWidgettab_01600360

위젯을 선택한 후 오른쪽 마우스 버튼을 눌렀을 때 나타나는 Add Item을 이용해 탭을 하나 더 추가 해 보죠.
대강 "ABC" 라는 이름을 넣어 주었습니다. 그림 2와 같은 화면을 얻으면 성공하신 겁니다.

그림 2. ABC 탭 추가 화면
잠깐, 자동으로 생성되는 mask 와 slot 코드의 내용을 살펴보도록 하죠.
가능하면 mask 코드를 손대지 마시라고 했는데, 가끔 가다 손을 대셔야 합니다. 단, 내용을 확실히 숙지한 다음 수정하셔도 무방합니다. 문제가 발생할 것 같은 경우 편집하고자 하는 mask*.cpp 파일의 복사본을 만드신 후 수정하는 것을 추천합니다.
가면 갈수록 점점 더 손을 대셔야 합니다. 비록 인자들만 손보는 것이지만.

mask*.cpp 함수에 어떤 내용이 들어 있는지 확인해 보죠.





본인은 탭 위젯의 이름을 tab_01로 탭 위젯을 만든 후, 한 개의 탭을 더 추가하여 총 2개의 탭을 갖는 탭 위젯을 만들었습니다.
 우선 enmu 영역과 widgetName 정의 영역을 살펴보면, tab_01, 바로 밑으로 obj7, obj8 이라고 되어 있는 것을 알 수 있습니다. 총 3개의 새로운 위젯이 생성되는 군요.

 위젯 생성을 담당하는 generated_defineMask() 함수를 찬찬히 살펴보는 tab_01 과 연관된 코드를 볼수 있습니다.
우선 탭위젭을 생성하는 코드를 살펴보겠습니다.

pvQTabWidget(p, tab_01, 0);
pvSetGeometry(p, tab_01, 195, 65, 600, 360);
pvSetFont(p, tab_01, "Times", 12, 0, 0, 0, 0);

pvQTabWidgets은 인자가 총 3개 입니다. 마지막 "0" 은 아마, 객체 상속과 연관되어 있는 것 같습니다.  이 함수와 모양, 사용 폰트가 정의 되는 것을 확인할 수 있습니다.

obj7, obj8 은 tab_01의 자식들입니다. 이 객체를 생성하기 위한 pvQWidget() 3번째 인자에 보면 tab_01이 자리잡고 있습니다.만약 이 값을 "0"으로 바꿔주면,... 본인이 모가 되어 따라 놀 것 같습니다.(테스트 해보지 않아서...)
pvQWidget() 함수를 이용해 객체를 만들고 pvAddTab() 함수를 이용하여 탭을 만들어 주는 군요. 이 함수 4번째 인자인 pvtr()...(Qt 에서 문자열앞에 tr이 붙으면 텍스트 언어 변경과 연관이 있습니다.)에 입력된 내용을 보면 탭 생성시 입력한 값이며, 이 값이 탭에 나타납니다. TAB 01 이라는 탭명이 마음에 들지 않으니 First로 바꾸려면.... 이 값을 변경하면 됩니다.
변경하고, 디자이너 모드에서 확인해 보죠.

그림 3. 탭 명칭 변경
내용이 변경 되었습니다.

First 위젯에 지금까지 사용한적이 없는, 뭐 예시 개념이니까... MultiLineEdit 위젯을 넣어보죠.
이름 그대로 여러라인을

그림 4. GUI 실행 화면
그림 4와 같이 텍스트를 직접 입력할 수 있습니다.

재미있는 것은 텍스트를 입력할 때 아무런 이벤트도 발생하지 않습니다. 엔터와 같은 특수키가 입력되면 KEYBOARD_EVENT가 발생합니다.

pvQMultiLineEdit 에서 지원하는 함수들을 살펴보면
pvSetFontColor(p,id,r,g,b);
pvSetFont(p, id, "family",...);
PvPrintf(p, id, "format");
pvText(p, id);
이런 함수들이 보입니다.

 장난삼아...(탭 위젯 설명하기 귀찮아 물타기하는 중....)   툴박스를 눌렀을 때 나타나는 메시지를 멀티라인에디터에 나타내 보겠습니다.
우선, 사용가능한 이벤트를 확인하기 위해 서버 메시지 창에서 툴박스 버튼을 눌렀을 때 나타나는 이벤트를 확인해 보죠.

확인하셨나요? 쉽게 찾으 실 것 같은데 TAB_EVENT 가 발생합니다.
그러면 slotTabEvent() 함수에 코드를 넣어봅시다.




별거 없습니다. pvPrintf 함수의 세번째 인자가 "format"으로 되어 있는 이 것을 C/C++ printf 함수 인자와 동일한 방식으로 써 주면 됩니다.
본인은 단순하게
"Text is : %d\n", val
을 넣어 주었습니다.
컴파일 후 확인해 보죠.

그림 5. 실행화면

툴박스 버튼을 누를 때 마다 그림 5와 같이 메시지가 나타납니다.

MultiLineEdit를 여러 용도로 사용할 수 있겠지만, 저는 서버 실행상태, 특히 에러 발생 유무를 실시간으로 표시하기 위해 사용합니다.
MultiLineEdit 창에 나타나는 텍스트의 폰트 색상, 스타일도 함수를 이용하여 편집가능할 뿐 아니라, 해보지는 않았지만 창 내용 삭제도 가능합니다.

추후 테스트 해보야 할 내용
pvText()... 이 함수를 이용하면 멀티라인에디터의 내용을 csv로 출력할 수 있을 것 같다.
이 함수를 사용하면 ClipboardEvent가 발생한다. 이 곳에서 만들면 되겠지....


다시 탭위젯 본론으로 돌아와서 pvbrowser에서 ABC 탭을 눌러 보십시오.

그림 6. 탭 전환
그림 6과 같이 ABC 탭 내용이 나타납니다...으응 아무것도 들어 있지 않네.

두서없이 쓴 글이지만 처음부터 이 내용까지 읽고, 직접 테스트 해 보셨으면, 나머지 위젯도 충분히 혼자 사용하실 수 있을 것 입니다. 그럼 건투...

댓글 없음:

댓글 쓰기