2010-05-10 6 views
2

radio_1에서 radio_10까지 10 개의 라디오 버튼이있는 간단한 QT 애플리케이션이 있습니다.QT NOOB : 동일한 유형의 여러 객체에 대한 액션 핸들러 추가

//! [1] 
class TimeSelector : public QWidget 
{ 
    Q_OBJECT 

public: 
    TimeSelector(QWidget *parent = 0); 

private slots: 
    //void on_inputSpinBox1_valueChanged(int value); 
    //void on_inputSpinBox2_valueChanged(int value); 

private: 
    Ui::Selector ui; 
}; 
//! [1] 

주석 처리 void_on_inputSpinBox1_valueChanged (int 값)이 튜토리얼이다 : 그것은 내가 이것을 가지고, 선택기라는 UI이며,이 디자인에 대한 내 헤더 파일에서 TimeSelector

라는 클래스의 일부입니다 간단한 계산기. 나는 내가 할 수있는 것을 안다 :

void on_radio_1_valueChanged(int value); 

그러나 나는 10 개의 함수가 필요할 것이다. 모든 것을 위해 작동하는 하나의 함수를 만들 수 있기를 원하며, 라디오 버튼의 이름을 라디오 버튼의 이름으로 전달하거나 라디오 버튼에 대한 참조를 전달할 수 있도록합니다. 그러면 라디오 버튼을 사용하여 작업하고 그 사람을 결정할 수 있습니다.

나는 매우 QT에 익숙하다. 그러나 이것은 매우 기본적이고 행할 수있는 것처럼 보일 것이다.

+0

'QSpinBox'와'QRadioButton'에는 같은 신호와 메소드가 없다는 것을 알아 두십시오. 가장 주목할만한 것은'QRadioButton'에'valueChanged (int)'신호가 없지만'QRadioButton' 체크 상태가 바뀔 때 방출되는'토글 (bool)'신호가 있다는 것입니다. – Lohrun

답변

0

당신이 할 수있는 일은 QRadioButton에서 상속받은 신호를 생성하는 자신 만의 라디오 버튼 클래스를 만드는 것입니다. 이 신호에는 원하는 모든 매개 변수가있을 수 있습니다.

void CheckWithReference(YourRadioButtonClass* rb); 

또는

void CheckWithReference(QString RadioButtonName); 

또는 당신이하고 싶은 것을.

그런 다음 모든 신호에 연결할 매개 변수 집합과 함께 TimeSelector 클래스에 슬롯을 만듭니다.

+0

이 방법이 효과가 있지만 Qt 초보자에게는이 방법을 사용하지 않는 것이 좋습니다. – Lohrun

4

고유 한 슬롯을 만들고 QObject::sender() 메서드로 신호를 방출 한 개체를 가져올 수 있습니다. 당신이 명시 적으로 어딘가를 정의하지 않는 한 radio->objectName()가 당신에게 좋은 결과를 제공하지 않습니다

public slots: 
    void onRadioToggled(bool checked) 
    { 
    QRadioButton *radio = qobject_cast< QRadioButton* >(QObject::sender()); 
    // radio is the object that emitted the triggered signal 
    // if the slot hasn't been triggered by a QRadioButton, radio would be NULL 
    if (radio) { 
     qDebug() << radio->objectName() << " is set to " << checked << "."; 
    } 
    } 

하는 것으로 다음 코드는 슬롯의 예를 제시한다.

이제 모든 QRadioButtontoggled(bool checked) 신호를 onRadioToggled 슬롯에 연결할 수 있습니다. QRadioButton에는 valueChanged 신호가 없으므로 코드가 실제로 작동하지 않습니다.

connect(radio_1, SIGNAL(toggled(bool)), SLOT(onRadioToggled(bool))); 
connect(radio_2, SIGNAL(toggled(bool)), SLOT(onRadioToggled(bool))); 
... 
connect(radio_10, SIGNAL(toggled(bool)), SLOT(onRadioToggled(bool))); 
+0

디자이너에서 단추를 선택하고 마우스 오른쪽 단추를 클릭하여 단추 그룹에 지정할 수 있습니다. 그러나 IMO는 슬라이더와 편집 상자와 같은 다른 컨트롤에도 적용 할 수 있기 때문에 더 효과적입니다. – dashesy

1

라디오 버튼의 경우 단추를 QButtonGroup에 추가하십시오. 유사한 기능이 QSignalMapper를 제공합니다.

관련 문제