2013-07-03 2 views
1

내 Qt 애플리케이션에서 동적으로 '질문'을 QVBoxLayouts에 '설문지'로 만듭니다. 질문에는 세 가지 유형이 있습니다 : 부울, 텍스트, & 라디오.함수를 QWidget의 Qt 's SLOT()에 프로그램 할 수 있습니까? 아니면 QSignalMapper를 사용해야합니까?

사용자가 설문지에 질문을 추가하면 QComboBox가 표시됩니다. 이 QComboBox의 색인/텍스트를 편집 할 때 나는 방출 된 신호에 대해 행동하기를 원합니다.

나는 (옛 안드로이드 프로젝트에서) 자바의 뭔가를하고 싶은 :

button.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      //Code to run... 
     } 
    }); 

Qt를/C에서 동일한을 가질 수 있습니다 ++와 같은 :

connect(qvectorOfComboBoxes.at(qvectorOfComboBoxes.end()), SIGNAL(currentTextChanged(QString)), 
      this, SLOT(
        void comboBoxTextChanged(QString newComboxBoxText) 
        { 
         //This doesn't work 
        })) ; 

을 내가로부터 이해 여기에 ideal approach의 또 다른 게시물은 QSignalMapper이지만 위와 비슷한 방식으로 작업을 수행하기를 원했습니다.

대개 여기 또는 관련 Google 검색에서 답변을 찾을 수 있습니다. (아마도 내가이 이름을 모르므로 잘못된 검색을하고 있습니다.) 누군가가 여기에 누군가 나에게 기쁜 소식을 줄 수 있기를 바랬습니다. 또는 nay. 감사합니다

Qt5에서

답변

1

와 C++ 11 지원 컴파일러를 사용하여, 당신은 explained here으로, 슬롯으로 lambdas를 사용할 수 있습니다

connect(sender, SIGNAL(signal(QString)), [](QString newComboxBoxText) { 
    // add your code here 
}); 

그렇지 않으면, 당신은 신호를 보낸 QObject*를 조회 할 수 sender()을 사용할 수 있습니다, 필요한 정보가 충분하다면 이를 QComboBox*으로 전송하려면 qobject_cast<QComboBox*>Q_ASSERT을 사용하십시오. null이 아닙니다. (다른 유형과 연결된 컴파일 타임 오류를 얻을 수 없습니다.)

+0

답변과 올바른 용어를 제공해 주셔서 감사합니다! 나는 그저 그것을 시험하려고하고 있으며, 나는 잠시 후에 이것을 대답으로 표시 할 것이다. – btb