2011-09-28 4 views
2

일부 과학적 소프트웨어 용 Qt GUI를 작성하고 있으며 사용자가 단위를 설정해야하는 수량에 QSpinBoxes 및 QDoubleSpinBoxes가 있습니다. 필자는이 스핀 박스 - 콤보 박스 쌍을 연속적으로 가지고 있기 때문에 오른쪽의 콤보 상자를 왼쪽의 스핀 박스에 융합시키는 것이 혼란스럽지 않을 것이라고 생각합니다.QscinBox에 통합 된 QComboBox

나는 이것을 스타일 시트와 함께 시도했지만 이것을 할 때 나는 스타일을 잃어 가고있다.

[kludgy가 아닌] 바람직하지 않은 방법은 무엇입니까? 당신이 0이되어야 spinbox 및 콤보 상자 사이의 거리를 의미 융합에 의해, 다음, QProxyStyle의 자손을 만들 반환 -1 QStyle::PM_LayoutHorizontalSpacing을 요청하는 경우 styleHint 다시 구현하고, declarie해야하는 경우

감사합니다,

안드레아스

+0

다음은 내가 마음에 두는 모형의 모형입니다. http://pointfree.net/.other/fused.png – andreasw

+0

나는 정확하게 그런 수업에 관심이 있습니다. 이것을 구현 했습니까? 공유 하시겠습니까? – dhaumann

답변

2

두 위젯 유형을 수신하는 layoutSpacingImplementation (읽음 QStyle documentation) 슬롯 (열거 형을 나타냄).

MyClass::layoutSpacingImplementation(QSizePolicy::ControlType control1, 
             SizePolicy::ControlType control2, 
             Qt::Orientation orientation, 
             const QStyleOption * option = 0, 
             const QWidget * widget = 0) const 
{ 
    if (orientation == Qt::Horizontal && 
     ((control1 == QSizePolicy::SpinBox && control2 == QSizePolicy::ComboBox) || 
     (control2 == QSizePolicy::SpinBox && control1 == QSizePolicy::ComboBox))) 
       return 0; 

    int spacing = baseStyle()->styleHint(QStyle::PM_LayoutHorizontalSpacing); 
    if (spacing >= 0) return spacing; 
    return baseStyle()->layoutSpacing(control1, control2, orientation, option, widget); 
} 

그럼 당신은 그 융합 항목은 기본 스타일로 이전 스타일의 사용에 누워 위젯이 스타일을 설정합니다.

이렇게하면 모든 요소가 함께 융합되므로 융합되어서는 안되는 요소 사이에 공백을 추가하는 것이 가장 좋습니다. 그것은 작은 문제이지만, 불행히도 문서는 어떤 컨트롤이 왼쪽 또는 오른쪽 컨트롤 (내가 추측하는 것은 공간이 순서 독립적이라고 가정 됨)을 설명하지 않는다는 것을 나타내지 않으므로이를 달성 할 수있는 다른 방법은 없습니다.

편집 :

방금 ​​게시 된 이미지를 보았습니다. 표준 Qt에는 그러한 제어가 없으며 일반적인 방법으로이를 달성하는 것은 거의 불가능합니다. 자신 만의 레이아웃 클래스 나 자신 만의 QWidget 자손을 만들려고 할 수도 있습니다. 그러면 스핀 박스가 부분적으로 콤보 박스를 덮을 것입니다 (왼쪽 모서리 부분을 정확히 덮음). 이렇게하면 융합 환상을 만듭니다. 그러나 사용자가 콤보 박스의 폭이 넓은 스타일을 사용하면 스펠 박스 측면에서 "조심"하게됩니다. 이것은 빠르고 veeeeeery 못생긴 해결 방법입니다.

당신이 가진 유일한 옵션은 자신 만의 위젯을 만드는 것입니다.하지만 QStyle (대부분 drawControl입니다)과 별도의 QSpingBox 및 QCombobox를 구현하는 코드의 스크랩 기능을 사용하여도 많은 것을 의미합니다. 작업. 당신이 얻고 자하는 것이 UI에서의 단순한 그래픽 효과라는 것을 고려할 때, 이것은 노력할 가치가 없다고 말할 수 있습니다.

관련 문제