2010-02-24 5 views
2

안녕하세요. Qt를 살펴보기로 마음 먹었고 Windows 응용 프로그램을 Qt로 쉽게 포팅 할 수 있습니다.Designer를 통해 Qt 객체를 만들지 않았을 때 신호를 처리하는 방법은 무엇입니까?

내 유일한 진짜 문제는 Qt에서 다시 구현해야하는 몇 가지 컨트롤입니다. 이미 컨트롤의 기본 드로잉을 처리했지만 내 컨트롤은 자식 스크롤 막대를 만듭니다. 문제는이 스크롤바가 새로운 위젯의 일부로 동적으로 생성된다는 것입니다 (즉, m_Scrollbar이 위젯의 ​​구성원 임). 그런 다음 어떻게 스크롤 바의 움직임에 반응 할 수 있습니까? 다른 환경에서 이것은 on_myscrollbar_sliderMoved 함수를 내 protected slots으로 만들고 거기에서 처리하기 때문에 쉽습니다. 그러나 myscrollbar이라는 QScrollBar에 의존합니다. 디자이너가 아닌 객체를 동적으로 생성 했으므로이 신호를 어떻게 캡처합니까?

나는 이것이 정말 간단 추측하고 그리고 난이 명백한 :

+3

Qt docs에서 더 많은 시간을 할애해야한다고 생각합니다. – erelender

+0

아마도 사실입니다 ...하지만 1 시간 전 Qt를 처음으로 들었을 때 나는 너무 심하게 "너무"하지 않고 있다고 생각합니다 : DI는 좋아하지만 ... 아주 쉽게 :) – Goz

답변

5
connect(myScrollbar, SIGNAL(<signal signature>), this, SLOT(<slot signature>)); 

전화가 스크롤 막대를 생성 한 후 연결 누락 (난 당신이 스크롤 막대를 생성 한 후 즉시 처리이 신호를 필요로 추정).

myScrollbar 유형이 QScrollBar *이고 슬롯이 클래스의 멤버로 정의되어 있다고 가정합니다.

myScrollbar가 파괴되면 연결이 제거됩니다 (연결이 끊어짐).

QObject :: connect 및 QObject :: disconnect 메서드에 대한 문서를 참조하십시오.

나중에 편집 - 더 구체적으로, 코드에서 때문일 수 있습니다 : handleSliderMoved이 클래스의 슬롯 방법

myScrollbar = new QScrollBar; // Create the scroll bar 
// ... add it to the layout, etc. 
// ... and connect the signal to your slot 
connect(myScrollbar, SIGNAL(sliderMoved(int)), this, SLOT(handleSliderMoved(int))); 

합니다.

+0

달콤한 ... 나는 그것은 단순한 무언가 일 줄 알았습니다! 건배 :) – Goz

관련 문제