사용자 정의 슬라이더 세트 (슬라이더와 연관된 레이블로 구성된 QWidgets)가있는 사용자 정의 QDialog가 있습니다. 본질적으로이 대화 상자는 각 치수의 슬라이더를 조정하여 3D 장면에서 객체의 좌표를 변경하는 데 사용됩니다.매핑 여러 슬라이더가있는 사용자 정의 QWidget의 QSlider :: valueChanged 신호
현재 QDialog 자체는 수정 한 장면 개체에 대한 포인터를 저장합니다. 따라서 슬라이더가 valueChanged
을 내보낼 때 객체 이동을 처리하는 슬롯도 QDialog 클래스의 일부입니다. 이동 된 슬라이더를 알 수있는 방법이 없기 때문에 (다소 비효율적 인) 이동 기능은 대화 상자의 모든 슬라이더를 반복하고 값을 수집 한 다음 3D 객체에 새 구성을 지정합니다.
이상적으로 슬라이더를 움직일 때 변경된 치수 만 다시 지정해야합니다. 그래서 QSignalMapper를 사용하여 각 슬라이더를 숫자 인덱스로 식별하려고 시도했습니다. 이렇게하려면 두 개의 매개 변수, 즉 보낸 사람 슬라이더를 식별하는 신호와 새 값 자체를 제공하는 신호를 사용하여 valueChanged
신호를 보낼 수 있어야합니다. 불행히도 here을 배웠으므로 QSignalMapper가이를 수행 할 수 없습니다.
원하는 기능을 얻는 또 다른 방법은 sender()
메서드를 사용하는 것입니다. 그러나 문서에 따르면 이는 나쁜 관행입니다. 모듈성의 원칙을 위반합니다.
다른 해결책 몇 가지를 생각해 볼 수 있습니다. 부모 슬라이스 클래스가 부모 대화 상자를 저장할 수 있도록 허용합니다. (동일하게 나쁜 것 같습니다. sender()
이 좋지 않습니다.) 또는 정적 멤버로 이동 가능한 객체 자체를 저장할 수도 있습니다. 전체 대화 상자에서 (정적이 아닌/지금은 그대로) 사용자 정의 슬라이더 클래스.
어떤 방법을 사용하면 가장 좋은 방법일까요? 어떤 대안을 고려해야합니까?
그 접근 방식은 훌륭합니다! 사실, 필자는 필자의 경우 'valueChanged'의 추가 방출이 필요 없다는 것을 발견했다. – nicole