옥션에서 구매결정시 사파리, 크롬, 파이어폭스 에서 절대 할 수 없다.

구매결정실패

크롬, 사파리, 파이어폭스에서 구매결정을 해도 실패한다. ㅡㅡ;;


도대체 알아서 고쳐줄 생각을 안해서 직접 확인하기로 했다.

확인 결과 구매결정 링크 부분의 &(앤퍼시엔드)가 웹표준을 위해 & 로 변경한 걸 알 수 있었는데 코더하시는 분이 간과한 사실은 a 나 form 과 같은 링크에 사용되는 주소(uri)는 & 단어가 브라우저자체에서 & 로 인식 할 수 있지만 자바스크립트의 주소는 문자로 인식된다는 점이다.

그런데 웃긴게 인터넷익스플로러는 & 를 인식한다는거.. ㅡ_ㅡ;;;

망할 익스플로러는 느슨해도 너무 느슨하다.. ;;

결론은 구매결정의 팝업창 캡쳐 화면의 주소부분의 & 를 & 로 변경하면 잘 된다.
(팝업 창 주소를 확인하는 방법은 각자 알아서 해결하시길~~~~ ㅎㅎㅎ)

 
크롬에서 구매결정!!

구매결정 주소의 & 를 &로 바꾸면 구매결정이 가능하다.


일단 여기까지는 넘어가지만 파이어폭스에서는 완료 버튼이 동작하지 않는다.
페이지 소스보기를 통해 확인한 결과..

100 번째 줄의 만족도 확인 자바스크립트에서 radio 버튼 폼의 접근을 대괄호"("로 해버린다....
객체 접근이 무슨 함수도 아니고.. 괄호로 처리되니 나는 오류다... 재밌는건 파이어폭스만 중단될뿐 크롬이나 사파리는 올바르게 접근된다. ㅋㅋㅋ

개발자적 시각으로 접근하면 이건 오류다.
괄호는 메소드실행에 대한 인자 전달이고 중괄호"["가 배열에 대한 접근이므로 radio 버튼에 대한 접근은 중괄호"[" 가 맞기 때문이다. ㅡㅡ;;
rfc 문서 들고 딴지 거실분들 있으시면 GG 치니깐 태클은 ㅈㅅㅈㅅ;;

 100번째 줄을 중괄호"[" 로 고치면 파이어폭스에서도 가능하겠다.

if(!(document.decision_form.satisfaction[0].checked || document.decision_form.satisfaction[1].checked || document.decision_form.satisfaction[2].checked)){
alert("만족도를 선택해주세요.");
document.decision_form.satisfaction[0].focus();
return false ;
}

아..... 귀찮어.. 술먹고 뭐하는 짓이래.. ㅜㅡ
크리에이티브 커먼즈 라이선스
Creative Commons License

Qt ShortCut 코드 삽질

2010/09/17 10:00 | Posted by 배제군
*QPushButton 에서 Shortcut 의 경우 Text 설정 후 입력되어야함

- 예1 -
QPushButton *btn = new QPushButton(this);
btn->setShortCut(Qt::Key_F1);
btn->setText("버튼");
.... 기타 connect....

↑ F1 키 작동 불가 코드

- 예2 -
QPushButton *btn = new QPushButton(this);
btn->setText("버튼");
btn->setShortCut(Qt::Key_F1);
.... 기타 connect....

↑ F1 키 작동 가능 코드

setShortCut 을 설정하더라도 setText  입력시 단축키값을 설정하기 때문
setText("&Push"); 처럼 & 다음 영문자를 Alt 키 조합으로 입력시킴 = Alt+D

어쩐지 안되더라.. *_*;;

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

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
이전 1 다음