두 위젯 유형을 수신하는 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에서의 단순한 그래픽 효과라는 것을 고려할 때, 이것은 노력할 가치가 없다고 말할 수 있습니다.
다음은 내가 마음에 두는 모형의 모형입니다. http://pointfree.net/.other/fused.png – andreasw
나는 정확하게 그런 수업에 관심이 있습니다. 이것을 구현 했습니까? 공유 하시겠습니까? – dhaumann