Qt에서 hitButton를 이용한 클릭영역 지정

2010/09/05 23:07 | Posted by 배제군
http://korone.net/bbs/board.php?bo_table=qt_qna&wr_id=17786

Qt 커뮤니티에서 버튼의 hit영역 지정글 질문에 대해 테스트했다.

Qt API 에 QAbstractButton 클래스 메소드 중 hitButton 를 확인하면 아래와 같다.

bool QAbstractButton::hitButton ( const QPoint & pos ) const   [virtual protected]

Returns true if pos is inside the clickable button rectangle; otherwise returns false.

By default, the clickable area is the entire widget. Subclasses may reimplement this function to provide support for clickable areas of different shapes and sizes.


pos 가 클릭 가능한 버튼 사각형에 포함되면 true 아니면 false 를 리턴한다.
기본적으로 클릭가능한 영역은 완전한 widget이다. 하위클래스에서 클릭가능한 영역을 도형이나 크기로 지원가능하게 제공하면 재구현이 가능하다.

위의 내용를 참조로 간단하게 구현해봤다.

이미지는 위 질문링크에 포함된 이미지를 사용했고 포토샵에서 클릭영역을 확인 지정했다.



GUI 프로젝트를 생성하고 QPushButton 과 클릭여부를 확인할 QLineEdit 위젯을 알맞게 배치한다.
QPushButton 에 아이콘을 넣을 수 도 있지만 배경으로 넣는게 정렬이나 위치지정에 유용하기때문에 나같은 경우 자주이용한다.

그리고 기본적인 배치 및 클릭여부를 확인하고 QPushButton 을 재구현한 QPolygonPushButton 을 만들자.

project -> add New -> c++ -> c++ class 선택
Class name : QPolygonPushButton
Base class : QPushButton
Type info : inherits QWidget

생성 후 hitButton 가상함수를 구현하자.

qpolygonpushbutton.h 에서

private:
    virtual bool hitButton ( const QPoint & pos ) const;

를 선언한다.
 
그리고 qpolygonpushbutton.cpp 에서 hitButton 을 구현한다.

bool QPolygonPushButton::hitButton( const QPoint & pos ) const {
    QPolygon *f = new QPolygon(4);
    f->setPoint(0, 22, 0);
    f->setPoint(1, 100, 0);
    f->setPoint(2, 110, 26);
    f->setPoint(3, 15, 26);
    bool ok = f->containsPoint(pos, Qt::OddEvenFill);
    return ok;
}

질문에 나온 사다리꼴 좌표를 저장하기 위해 QPolygon 을 이용했다.
각 좌표를 박스 그리듯 순서대로 지정하고 containsPoint 함수를 이용해 pos 와 비교한다.
비교 결과를 ok 로 리턴하게 만들면 함수는 완성이되고 기본 프로그램을 구성했던 QPushButton 을 지금 구현한 QPolygonPushButton 클래스로 바꾸어 다시 실행해본다.



완성된QPolygonPushButton 테스트 프로그램
사다리꼴 영역은 eventCnt 가 올라가지만 이외의 영역은 클릭판정을 받지 못한다.



음표 영역을 선택해서 올바르게 작동하는지 시험해본다.

테스트한 프로젝트 압축본

짧은작성후기.
Qt가 워낙 API가 잘 나와서 그런지 충돌영역검사도 엄청 쉽게 되어 있다.
옛날이면 충돌영역을 bit 이미지로 저장해서 검사하게 했을꺼 같은데.. ㄷㄷ.. ;;
응용하면 QPolygon 을 입력받게 하거나 이미지를 계산하게도 가능하겠다.

크리에이티브 커먼즈 라이선스
Creative Commons License

SVN Tool - RapidSVN 사용법

2010/08/17 16:14 | Posted by 배제군
이 문서는 계속 업데이트 됩니다. v0.1

1. SVN 개념

개념도

개념도. SVN의 Checkout, Update, Commit 등의 명령으로 형상관리를 할 수 있다.


SVN은 위처럼 서버등록된 파일을 자신의 PC에 내려받아 수정하고 SVN 서버에 업로드 하는 방식의 버전관리시스템이다.

2. RapidSVN
Tigris.org Open Source Software Engineering Tools 에서 배포하는 SVN 클라이언트다.
왜 이걸 쓰냐면 크로스플랫폼 프로그램이기때문에 리눅스, MAC, 윈도우 똑같이 무료로 사용할 수 있다.

2.1 RapidSVN 설치.
http://rapidsvn.tigris.org/ 에서 최신버전을 다운 받는다. 글쓴 시점에서 0.12.0-8051 이다.

설치진행중

컴맹이라도 Next만 클릭하면 설치는 식은 죽먹기.


실행화면

설치 완료 후 실행


2.2 RapidSVN 작업 준비
 글 처음의 개념도에서 1번의 내용이다.
 아래 그림처럼 북마크에서 우 클릭 후 메뉴중 Checkout New Working Copy.. 을 클릭한다.
 - Checkout New Working Copy.. : 새로운 폴더에 Checkout 을 하겠단 뜻이다.
 - Add Existing Working Copy.... : 이미 Checkout 받은 폴더를 북마크에 추가
 - Add Existing Repository... : SVN서버의 목록을 등록한다. Checkout New Working Copy.. 는 데이터를 내려 받지만 이 메뉴는 서버데이터의 목록만 확인 가능하다.
 - Create New Repository... : 커맨드라인 서브버전(svnadmin) 파일로 받아 처리 하라고 한다. *_*;;
 - Switch Repository... : 선택된 저장소의 URL을 바꿀때 쓴다. 저장소 주소가 바뀐 경우 필수다.
Checkout New Working Copy.. 선택 화면

Checkout New Working Copy.. 를 눌러 내 PC에 SVN서버에서 파일을 Checkout 받자.




다음의 Checkout 팝업창에서 URL 과 목적폴더를 눌러 OK를 누른다.
Checkout 창

URL 및 Dest Dir 을 선택하고 OK를 누른다.


계정정보입력창

계정정보를 요구하면 저장소에 접근가능한 계정정보를 입력한다.



아래는 OK 누른후 다운 받아진 항목과 결과 창이다.
Revision 이 1 이고 Rep.. 이 1이니 현재 저장소와 내 폴더의 리비전이 일치하는 현재로선 최신버전이다.
Ckechout 완료 화면

Checkout 완료 후 Bookmarks 에 폴더가 추가되어 있고 폴더 및 파일 내용이 나온다.



실제 탐색기에도 파일이 받아져 있다.
탐색기 내용

탐색기에도 동일한 파일이 들어있다.



하지만 Checkout 된 폴더에는 숨겨진 파일로 .svn 폴더가 존재한다.
다음은 폴더 속성에 숨김 파일 보기를 했을때 화면이다.
숨겨진 svn 폴더

숨김파일보기를 했을때 숨겨진 .svn 폴더가 나타난다.


이게 SVN 을 사용하면서 가장 중요한 부분이 아닐까 싶다.
이 .svn 파일 속에는 현재 폴더에 각 파일의 정보를 담고 있는 META 파일이 존재하기때문에 함부로 위치이동을 하면 안된다.
.svn 폴더가 삭제됐을 경우 update 받으면 새로 받아지지만 혹시나 다른 svn 폴더로 덮어 쓰기 되버리면 감당하기 힘들다.. ;;
그리고 A라는 폴더의 내용의 이름을 B라고 바꾸고 싶을때 그냥 파일이름 변경으로 하면 절대 안된다.
(저 .svn 속의 META 파일에선 A라는 파일로 계속 남아있을테니까..)
그래서 SVN 에서 이름 바꾸기는 A폴더의 내용을 B로 복사(B폴더내의 .svn삭제) 후 A폴더 삭제(delete) 명령, B폴더 추가(add) 명령을 한다.
이걸 깜빡하면 Commit 했을때 경로가 깨졌다니 충돌이 났다니 저장소를 찾을 수 없다느니하는 엄청난 결과가 온다.
이러면 이전의 리비전으로 모두 받고 수정파일만 다시 저장하고 Commit 하는 사태가 벌어질 수 있으니 매번 강조해도 지나칠 수 없는 것이다.

2.2 RapidSVN 최신 버젼 갱신
 Checkout 으로 작업폴더를 만들었으면 작업을 시작할때다.
 모든 작업은 시작하기전에 Update 를 받아 최신파일로 갱신해야한다.
 예전 파일을 수정하면 다른 사람이 수정한 최신파일 적용받지 못해 충돌이 날 수 있기때문이다.

Update 선택

작업전 update 는 필수다.


OK를 누르면 최신버전을 확인 후 자동으로 적용시켜준다.
Update 창

최신 버전을 항상 확인하자.



계속 됩니다.
크리에이티브 커먼즈 라이선스
Creative Commons License

삽질 - Zend Decoder 안풀림..ㅜㅡ

2010/06/29 17:35 | Posted by 배제군
PHP로 간단한 작업이 생겨 확인을 하는 중 젠드 인코딩된 파일을 발견했다.

'뭐.. 이것쯤이야.. 젠드 디코더로 풀어버리면 그만이지' 란 생각으로 파일질라로 해당 파일을 다운받아 변환기로 돌렸다.

하지만.. 두둥..
PHP Fatal error:  This encoded file is corrupted. Please refer to http://www.zend.com/support/support_faq.php?id=loader_file_corrupt for further help in XXXXX.php on line 0
Content-type: text/html
X-Powered-By: PHP/4.4.0
아니.. 이뭐병?! 4 버젼대로 작성된 오래된 파일이라 당연히 풀릴줄 알았것만..

디코더 5버젼으로 해도 마찬가지.. 결국.. 구글신의 힘을 빌어 데이터 천국을 헤엄쳤다.

그러나 온라인 디코더사이트나 다른 디코더도 결국 디코딩이 안됨.. 아흐....... ㅅㅂ을 연달아 외침.. ㅜㅡ

몇시간을 헤맨 끝에 결국 원점에서 다시 생각해보기로 했다.

처음 절차부터 시작..  오류 메세지를 유심히 살펴보는 중... 근데 오류 메세지가 어디서 많이 본듯해...

그러고 보니 이건................. 으.............

인코딩된 파일 FTP 업로드시 바이너리로 안 올리고 아스키 모드로 올렸을때 나오는 오류 메세지~!!!

그렇다.. 다운 받을때 바이너리 모드로 php 파일을 다운 받아야 하는데 아스키 모드로 받은 사실..

ㅂㅅ... 을 중얼 거리며 바이너리 모드로 변경받은 파일을 변환하니 역시나 잘된다.. 이런.. bullshit~
크리에이티브 커먼즈 라이선스
Creative Commons License

삽질 - QtWebkit Browser on Win CE 5

2010/06/26 17:49 | Posted by 배제군
기기 : (망할)아이스테이션 S43 (넷포스)
OS : (짜증나는) Win CE 5

이 자식.. 짜증나는! 불만 많은! 느려터진! 놈!

무선랜 접속을 할때면 혼자서 왔다 갔다 꺼졌다 켜졌다... 리셋하면 주인님 ㅄ 하면서 어느새 되고.. *_*

그래도 인터넷은 된다는 기대감에 자체 브라우져(IE6)로 접속하면 오나전 느려터지고 좀만 이미지 많으면 다운 ㅡㅡ;;

결국 이노무 자식 브라우져를 다른 빠른 놈을 써야겠다고 생각해서 오페라 결정!!
검색해보니 WinCE 버젼은 없구만.. *_*;;

그럼 크롬이 쓰는 웹킷을 쓰자~!
오키~ 이놈은 Qt로 컴파일하면 웹킷을 얹어서 쓸 수 있겠군. ㅎㅎ
Qt 기본 Demo에 웹킷을 얹은 기본 브라우져 프로그램이 있는걸 알고 이뜸 ㅋ

근데 컴파일 환경, 개발환경.. 내 환경이랑 다 틀림.. 안화.. ㅡ_ㅡ;;

결국 버철PC로 XP 설치~!, VC2005 다운 설치~!, Qt 최신버젼 콜~!, WinCE 5 SDK 설치 완료~!
-설치 옵션

vcvars32.bat
configure -platform win32-msvc2005 -xplatform wince50standard-mipsii-msvc2005 -webkit
set INCLUDE=C:\Program Files\Microsoft Visual Studio 8\VC\ce\include;C:\Program Files\Windows CE Tools\wce500\STANDARDSDK_500\Include\MIPSII_FP
set LIB=C:\Program Files\Microsoft Visual Studio 8\VC\ce\lib\mipsii_fp;C:\Program Files\Windows CE Tools\wce500\STANDARDSDK_500\Lib\MIPSII_FP
set PATH=C:\Program Files\Microsoft Visual Studio 8\VC\ce\bin\x86_mips;%PATH%;
setcepaths wince50standard-mipsii-msvc2005
nmake
망할 configure 할때 -webkit 을 안 쳤다고 browser 데모 컴파일이 안 됐음.. 아흑.. ㅠㅡ
저거 컴파일 한다고 반나절 소비 ㅜㅠ
결국 다 지우고 다시  -webkit 옵션 추가 후 컴파일.. 다시 반나절 이상시간 소요... ㅜㅡ
(컴 사양도 쿼드에 4기가인데 가상PC는 어쩔수 없다능..)

그렇게 시간은 흘러 Qt 컴파일이 완료되고~~ Qt 용 dll 파일과 WinCE dll 파일을 넷포스 Window 폴더에 복사 후 감격의 실행파일 실행~!!!

그리고 결과~~~!





S43에서 Webkit 브라우져 실행 안내 창

메모리 부족으로 실행할 수 없다는 메세지 ㅡㅜ



아.. ㅅㅂ........ 다른 데모는 돌아가는데 저것만.. ;;

인터넷 연결되면 그냥 RDP(원격 데스크탑)로 접속사용 콜.. -_-;;

크리에이티브 커먼즈 라이선스
Creative Commons License
아래는 새로 모듈제작을 해볼때 느꼈던 느낌과 생각을 적은 것이다.
국내 최고의 오픈소스 프로그램으로 생각하고 있지만 모듈을 개발해봄으로써 느낀 안타까움을 나열해 보고자 한다.

1. 개발 문서만을 보고서는 도저히 개발을 할 수가 없다.

 - 정말 개발문서만 보고 모듈을 만드신 분이 있을까?? 개발문서에 링크된 문서들은 언제 복구될것인지 안타까울뿐이다.

2. 질문&답변란만 보고서는 도움을 받을 수가 없다.

 - 나 처럼 질문 자체를 검색의 무지로 생각하고 이미 질문된 답변으로 해결 보려는 사람에게는 크나큰 어려움이다.
결국 해결을 못 봐 질문을 올렸지만 너무 상세하게 질문한 것인지 몇일 답변이 없어 삭제하고 다시 검색하고 해결책을 마련했다.
답변은 안 달아 준다는 걸 나쁘게 보는게 아니라 많은 피드백이 없어 안타깝다는 것이다.

3. 빠른 업데이트는 좋지만 사실 무섭다.. ㄷㄷㄷ

  - 빠른 업데이트는 그 만큼 수 많은 요구와 기능을 추가하는 것인데 정말 대단하다..  하지만.. 한편으로는 업데이트 될때마다 기능상에 제약이나 모듈의 변경 등등.. 바뀌는 것이 없나 걱정이 된다... 한마디로 업데이트 되면 무섭다.


그렇게 키보드를 두드려가며...........

이제 슬슬 이해되어 간다.
아직 제작단계라 배포는 안 했지만 게시판 뒤적거리며 검색하고 모듈 소스 뒤적거리며 확인 하고..
XE 폴더내의 파일속 전체 문자열 검색을 수도 없이 하며 구조를 익혔다.
에디트 플러스를 켜고 검색 - 여러파일에서 찾기를 누르고 함수명.. 변수명.. 클래스명.. 엄청 검색했다.
이렇게 메소드 및 클래스를 확인 해야 하는 것인가? 란 의문도 계속들었다.
그래서 제일 필요성을 느낀건 프로그램 개발 구조라는 것이다.
스트러츠2+iBatis+Spring 의 자바프로젝트를 경험했기에 프레임웍 자체는 두려움이 없었지만 개발문서에서 완전히 상황 역전됐다.
웬만큼 봐선 도대체 구조파악이 안되는 것이다.
겨우겨우 봐서 겨우 이해될랑 말랑하는게 웬만한 사람 아니고선 엄두를 내기 힘들것 같다.
(평소 내 이해력이 좀 후달린다는 걸 느끼는데 그것때문일까.. ㄷㄷ)

설정XML, MVC클래스, View HTML, 쿼리XML.. 작성하는 건 어렵지 않다.
하지만 좀 더 정확하고 상세한 문서가 존재한다면 더욱 많은 개발자의 지원이 존재하는 국내 최고의 오픈소스가 되지 않을까? 한다.

p.s XE 개발에 항상 힘쓰시는 개발자 분들에게 도움은 되지 못할지언정 불만만 쏟아 낸것 같아 송구한 마음이 한가득합니다. ㅠㅠ
오픈소스이기에 어떻게라도 도움을 드릴 수 있으면 좋겠지만 첫발을 내 딛는게 쉽지가 않네요.
기회가 되면 힘이 될 수 있게 지원하겠습니다.
항상 고생하시는 Zero님과 다른 개발자님들 힘네세요~ 그리고 죄송합니다. -.- _._
크리에이티브 커먼즈 라이선스
Creative Commons License

해외서비스인 웹게임을 차단? 부족전쟁

2009/04/25 23:36 | Posted by 배제군
최근들어 구글애드센스에 자주 노출되는 부족전쟁이라는 게임사이트에 접속했다.

온라인에서 진행되는 서버 실시간(?)용 웹게임인데 흥미로운 점은 국내에서 해당 웹사이트가 불법으로 간주, 차단됐다는 것이다.

부족전쟁 차단 이미지



여기서 의문스러운 사항은 "어디까지가 국가에서 책임지고 차단을 해야 하는 것일까?" 이다.

현재 부족전쟁은 국내에서 www.bujokjeonjaeng.kr 도메인으로 접속이 가능하며 이 도메인은 212.48.106.190 로 연결되어 있다.

부족전쟁의 연결 IP


계속해서 해당 아이피를 한국인터넷진흥원에 검색해보니 아래와 같이 국내 ISP가 아니라는 내용이 나왔다.

부족전쟁 국아이피 검사



또 다시 검색결과에 알려준 내용대로 다시 ripe.net 에서 검색하니 독일 업체 아이피가 나왔다.

ripe.net 에서 검색한 부족전쟁아이



위에서 알아본 바로는 현재 독일에서 서비스 중인 웹게임을 한글화하여 국내에서 독일서버로 접속하여 게임을 즐기는 구조인데 이때  국내법을 적용하여 접근을 못하게 차단하는 것이 옳은지 의문스럽다.
(차단은 국내의 ISP 업체를 통하여 이루어지고 있고 상위 DNS에서 위 IP로 접근시 차단안내 주소로 리다이렉트 시키는것 같다.)

무료 웹게임이고 게임내의 자원을 해외결제수단을 이용, 구입해서 무료 이용자보다 좀 더 좋은 위치에서 게임을 운용할 수 있는 구조인데 개인적으로 느끼기엔 별다른 제재가 필요없지 않나? 생각한다. (정확히 말하면 부분유료화 게임이다.)

유료결제가 걸리는지, 한글화 서비스에서 걸리는지, 지금 많고 많은 외국 온라인 게임 사이트들도 똑같은 구조로 운용되면 국가가 나서서 접속 차단을 해야 하는 것인지도 의문스러울 뿐이다. (해당 사이트가 불법적인 면을 가지고 있다고는 생각지 않는다.)

해외 플래쉬 게임 사이트들도 결제부분이 들어가거나 한글 서비스가 들어가면 똑같이 조치할것인가?

이런 극히 정상(?)적인 웹사이트보다 어느 게시판에서나 볼 수 있는 지긋지긋한 바카라, 도박, 성인물 사이트를 찾는게 더 쉬울텐데 말이다.

조금 비약하면 유튜브도 유료 결제 서비스가 이루어질 경우 국내처럼 심의를 정상적으로 받아야 하겠다.
심의 정상으로 받지 않으면 불법사이트로 접근 차단 될 수 있으니깐 ㅋㅋ

이런 생각이 고리타분하게 묶여 있다거나 잘못되어 있다는 걸 느끼신분들은 나에게 깨우침을 나누어 주면 좋겠다. ㅎㅎ;;

p.s 25일 밤 11시 14분 현재 부족전쟁 사이트는 트래픽 초과 메세지가 나오는데 전용서버없이 가비아에서 호스팅 받는다는게 좀 재밌다. ㅋㅋ
크리에이티브 커먼즈 라이선스
Creative Commons License

역시 구글.. 유튜브가 선보인 대인배 행동

2009/04/09 13:41 | Posted by 배제군


여타 국내 포털에서는 감히 넘보지 못할 행동을 구글이 해버렸군.

이로써 세계의 거대 공룡기업인 구글을 향해 정부가 어떤 방침을 놓을지 앞으로의 행보가 궁금하군하~ ㅋ

"로마에 가면 로마법을 따르라~" 고 했지? 우리나라도 우리 나름대로 문장을 지어낼 것 같다.

예를 들면 "대한민국에 가면 독재법을 따르라~" 라고 말야~ ㅋㅋ

다음에 들어갈 문장은 앞으로 조치에 따라 추가 될테고..

"말 안 들으면 사업 망쳐버린다~" 거나 "과태료 폭탄 나간다~" 와 같은?!? ㅡㅡ;;

그나저나 이런 웃을 일이 많은 뉴스가 많았음 좋겠군.

p.s 주절주절하며 독재법이라고 했으니 잡혀갈지 무척 걱정이다. ㄷㄷㄷ
( 미리 자기 검열해보는 배재군... 대한민국의 슬픈 현실.. ㅜ.ㅠ )
크리에이티브 커먼즈 라이선스
Creative Commons License
이전 1 다음