2016-07-12 9 views
0

데스크톱 및 일부 모바일 플랫폼에서 작동해야하는 응용 프로그램을 만들고 있습니다.라디오 버튼을 끌면 작업이 수행되지만 체크가 설정되지 않습니다.

다음 예에서는 해제 신호의 세로/가로 단추를 만들어 그룹에 슬롯에 연결합니다.

가로 버튼이 선택되어 가정 :

m_landscapeRadio = new QRadioButton(QObject::tr("Landscape ")); 
m_portraitRadio = new QRadioButton(QObject::tr("Portrait ")); 
m_orientationGroup.addButton(m_landscapeRadio, 0); 
m_orientationGroup.addButton(m_portraitRadio, 1); 
m_orientationGroup.setExclusive(true); 
m_landscapeRadio->setChecked(true); 
connect(&m_orientationGroup, SIGNAL(buttonReleased(int)), this, SLOT(orientationSlot(int))); 

그러나

나는 이상한 상황을 발견했다. 세로 라디오 단추를 누른 상태에서 끌어서 놓으면 슬롯 동작이 수행됩니다 (세로 옵션의 경우). 그러나 세로 단추는 선택되지 않습니다.

조치를 수행하지 않겠습니다. 지금은

... orientationSlot에서

내가 인수를 테스트하고 정말 스스로 그렇게 알고 단추를 예상했지만 ... 체크 값을 자신을 설정합니다.

하지만 사용자가 버튼을 누르고 마음을 바꾸면 버튼에서 드래그하여 작업을 수행 할 필요가 없다고 생각합니다.

답변

1
나는 검사가 실제로 일어난 경우 확인 처리 할 수 ​​

액션 슬롯을 선택하고 사용자 경험이 더 좋다고 생각하는 방식에 따라 액션을 확인하거나 버립니다.

void MyWidget::orientationSlot(int checked) 
{ 
    if(checked) m_portraitRadio->setChecked(true); 
    else  m_landscapeRadio->setChecked(true); 

    .... actual actions 
} 

을 나는 액션이 ​​사용자가 버튼 (내 원하는 옵션)에서 멀리 드래그 할 때 수행 할 수없는하려면 다음

가 나는 버튼을 점검 할뿐만 아니라 작업을 수행 할 경우 :

void MyWidget::orientationSlot(int checked) 
{ 
    if(m_orientationGroup.checkedId() != checked) return; 

    .... actual actions 
} 
0

QRadioButton을 사용하고 라디오 버튼을 전환 할 때 에 반응하여 마우스 버튼을 놓는 이벤트를 처리합니다. 드래그 이벤트로 인해 문제가 발생합니다. 버튼 을 확인하거나 수행하지 않을 작업을 원합니다.

버튼이 스위치 온 또는 오프 될 때마다 http://doc.qt.io/qt-5/qradiobutton.html

는, 상기 토글() 신호를 방출한다. 동작을 트리거하려면이 신호에 연결하십시오. 버튼이 상태를 바꿀 때까지 기다리십시오. 특정 버튼이 선택되었는지 확인하려면 isChecked()를 사용하십시오. 이 신호가 방출된다

http://doc.qt.io/qt-5/qbuttongroup.html#buttonToggled

공극 QButtonGroup :: buttonToggled (QAbstractButton * 버튼, BOOL 체크)

역시 명시 적 핸들러 또는 전체 그룹의 라디오 버튼을 연결 지정된 버튼이 토글되었을 때 checked는 입니다. 버튼이 선택되면 true이고 버튼이 선택되어 있지 않으면 false입니다.

참고 :이 클래스에서는 신호 버튼이 과부하 상태입니다. 이 예에서와 같이 함수 포인터 구문을 사용하여이 일에 연결하려면, 정적 캐스트에 신호 유형을 지정해야합니다

connect(buttonGroup, static_cast<void(QButtonGroup::*) 
     (QAbstractButton *, bool)>(&QButtonGroup::buttonToggled), 
    [=](QAbstractButton *button, bool checked) { 

    if (button == m_portraitRadio) { 
     // Portrait (un)checked 
     if (checked) 
     { 
     // checked! 
     } 
    } 
    /* ... */ }); 
+0

코드를 통해 버튼을 설정할 수 있으므로 토글() 신호는 사용하지 마십시오. – Thalia

+0

버튼 그룹 예제를 추가했습니다. 어떻게 든 누르면 개별 버튼을 인식해야합니다. 어쩌면 text() 메서드를 사용하고있을 수도 있습니다. – AlexanderVX

+0

고마워요. 방금 알아 낸 것입니다. 그룹에서 보낸 값을 버튼과 비교하고 실제로 확인했는지 확인할 수 있습니다. 그렇지 않으면 나는 그 행동을 버릴 것이다. 버튼이 많은 버튼 그룹에서는보기 흉합니다. – Thalia