2011-12-03 2 views
1

저는 Qt 초보자이며 기본 계산기를 만드는 중입니다. 만약 내가 제대로 이해하고,이 일 때 :Qt SLOTS 매개 변수 (초급)

connect(my_button_4, SIGNAL(clicked()), this, SLOT(writeNumberLbl("4"))); 

은 "4"에 액세스 할 수 없습니다 writeNumberLbl에 (오히려 단지의 유형입니다). 기본적으로, 버튼을 클릭하면 라벨의 텍스트가 "4"로 설정됩니다. 그러나, 나는 숫자 0 ~ 9, 그래서 내가하고 싶었던 :

connect(my_button_0, SIGNAL(clicked()), this, SLOT(writeNumberLbl("0"))); 
connect(my_button_1, SIGNAL(clicked()), this, SLOT(writeNumberLbl("1"))); 
... 
connect(my_button_9, SIGNAL(clicked()), this, SLOT(writeNumberLbl("9"))); 

내 writeNumberLbl 기능은 :이 매개 변수로 인해 작동하지 않습니다 것을 볼 수 있습니다, 그러나

void Calculator::preWriteVal(QChar val) 
{ 
    QString curVal = ui.lbl_output->text(); 
    curVal += val; 
    ui.lbl_output->setText(curVal); 
} 

, '발'. 누군가가 올바른 방향으로 나를 가리켜 주시겠습니까? 고맙습니다. 나는이 질문이 이미 응답되었고 아무것도 찾을 수 없었는지보기 위해 보았다. 있다면 링크를 제공해주세요.

또한 Qt Designer 4를 사용하여 위젯을 맞춤 슬롯에 연결할 수 있습니까?

감사합니다.

+0

유사한 질문에 대한 내 대답을보십시오. http://stackoverflow.com/questions/5153157/passing-an-argument-to-a-slot/5153522#5153522 – TonyK

+0

블로그를 팔로우 할 수 있습니다. Qt 애플리케이션 개발 초보자 : https://qtnoobies.blogspot.my/ – GeneCode

답변

0

이 문제를 해결하는 데는 여러 가지 방법이 있으며 그들은 very nicely here이라고 설명합니다. 이 페이지는 약간 오래된 것이지만 여전히 유효하다고 생각합니다. 신호 매퍼를 사용하는 것이 좋습니다.

두 번째 질문에 대해서는 그렇습니다. "신호/슬롯 편집"모드에서 디자이너를 설정하여 Qt Designer를 사용하여 신호와 슬롯을 연결할 수 있습니다. 예를 들어,이 모드에 있으면 단추에서 폼으로 연결선을 끌어 올 수 있습니다. 연결할 신호와 슬롯을 선택할 수있는 대화 상자가 열립니다. 코드에 아직 슬롯을 구현하지 않은 경우 슬롯 이름을 지정한 다음 나중에 코드를 추가 할 수 있습니다.

+0

조언 해 주셔서 감사합니다. 그러나 "Edit Signals/Slots"모드에 대해 알고 있었는데, 사용자 정의 슬롯 (내가 만든 슬롯)으로 푸시 버튼을 끌기위한 방법이 있는지 궁금해하고있었습니다. –

+0

예.슬롯을 이미 정의한 경우 슬롯이있는 객체로 커넥터를 드래그하고 결과 대화 상자에 연결할 수 있습니다. –

+0

도움을 주셔서 감사합니다. 나는 지금 훨씬 더 잘 이해한다고 생각한다. 이 문서의 마지막 부분은 다음과 같습니다. "... 사용자가 표준 색상 세트에서 색상을 선택하고 colorSelected (const QColor &) 신호를 내야하는 팔레트 도구를 구현하려는 경우, 가장 좋은 방법은 위에서 설명한 sender() 접근법 또는 하위 클래스 접근법을 사용하는 것입니다. " 예를 들어 if-else 문이 필요한지 궁금합니다. if (button1 == (* pusbutton) sender()) // 팔레트 색상을 파란색으로 바꿈 else if (button2 == (* pusbutton) 발신자()) // 팔레트 색상을 빨간색으로 변경 등 –

1

내가 아는 한 Qt의 신호/슬롯 시스템은 신호 기능의 매개 변수 수가 슬롯 기능의보다 작은 이 아닌 것을 요구합니다. 예를 들어, 신호 함수 click()에는 매개 변수가없고 슬롯 함수 writeNumberLbl ("4")에는 하나의 매개 변수가 있습니다.이 매개 변수는 Qt의 신호/슬롯 시스템에서 허용되지 않으며 프로그램을 Qt의 디버그 모드로 실행하면 qDebug는 'Incompatiable signal/slot'blalbalba ~와 같은 메시지를 보여줍니다. 이 문제를 해결하려면 Arnold Spence가 제공 한 기사를 읽으십시오. 그것은 아주 분명하다.

0

슬롯의 매개 변수 개수가 Signal? 누른()에는 아무 것도 없습니다. 두 가지 선택이 가능합니다. (3 개는 멍청한 것입니다.)

  1. QSignalMapper를 사용하십시오. 그것의 도움은 자명하다.
  2. 모든 버튼을 단일 슬롯에 연결하십시오. 그 안에 어떤 버튼이 눌려 있는지 알아보십시오. QObject :: sender() 함수가 도움이됩니다.

더 많은 방법이 있지만 더 복잡합니다.