2010-02-17 8 views
2

서브 클래 싱 된 QSpinBox의 묶음을 포함하는 서브 클래 싱 된 QDialog가 있습니다. 스핀 상자를 클릭하면 푸시 버튼을 사용하여 숫자를 입력 할 수있는 키패드 (다른 QDialog)가 나타납니다. 두 QDialog 모두 QDialog :: exec();QDialog 다른 QDialog 팝업

그러나이 두 번째 QDialog를 열면 첫 번째 문이 닫힙니다. 나는 그걸 밟아서 첫 번째 QDialog가 아직 끝나지 않았다는 것을 알아 차렸다. QDialog 1은 QDialog 2를 마친 후에 "QDialog :: Rejected"를 보냅니다. QDialog 1은 끝내지 않을 것입니다. 입력 된 값으로 스핀 박스를 업데이트하고 다른 스핀 박스의 QDialog를 열어야합니다. 사용자가 나중에 편집하려고합니다.

QDialog 1의 이벤트 루프가 QDialog 2의 이벤트 루프에 의해 종료되는 것과 관련이 있다고 생각합니다. 나는 QDialog 2에 QDialog :: show를 사용하여 시도했다. 위젯은 잠시 동안 (밀리 세컨드) 팝업되지만 활성화되지는 않는다. QDialog 1도 즉시 닫힙니다.

답변

3

QDialog 1을 Qt :: Popup으로 설정하면 QDialog 2는 기본적으로 Qt :: Dialog로 설정됩니다. 팝업은 광범위한 이벤트를 종료합니다. QDialog 2의 플래그를 Qt :: Popup으로 설정 했으므로 QDialog 1을 더 이상 닫지 않는 것 같습니다.

2

코드를 구두로 설명한 방식으로 설명하는 문제를 보지 않아야합니다. 실제 코드를 보지 않고도 문제의 원인을 추측 할 수는 없습니다. 그러나 나는 대화 A에서 exec()을 실행했다는 것을 확실하게 말할 수 있으며 그 안에는 대화 상자 B (버튼에서)에 exec()이 실행되고 대화 상자 B가 종료되면 대화 상자 A를 사용할 수있었습니다.

+0

감사합니다. 이벤트 루프에 관한 부분은 정말로 막 다른 골목이었습니다. – Pieter