Przeglądaj źródła

Size policy of a slider changes based on its orientation

Julien Finet 14 lat temu
rodzic
commit
fdb8b1be24

+ 14 - 2
Libs/Widgets/ctkDoubleRangeSlider.cpp

@@ -90,8 +90,8 @@ void ctkDoubleRangeSliderPrivate::init()
   this->MaxValue = this->Slider->maximumValue();
   this->SingleStep = this->Slider->singleStep();
 
-  q->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed,
-                               QSizePolicy::Slider));
+  q->setSizePolicy(this->Slider->sizePolicy());
+  q->setAttribute(Qt::WA_WState_OwnSizePolicy, false);
 
   this->connectSlider();
 }
@@ -498,6 +498,18 @@ void ctkDoubleRangeSlider::triggerAction( QAbstractSlider::SliderAction action)
 void ctkDoubleRangeSlider::setOrientation(Qt::Orientation newOrientation)
 {
   Q_D(ctkDoubleRangeSlider);
+  if (this->orientation() == newOrientation)
+    {
+    return;
+    }
+  if (!testAttribute(Qt::WA_WState_OwnSizePolicy))
+    {
+    QSizePolicy sp = this->sizePolicy();
+    sp.transpose();
+    this->setSizePolicy(sp);
+    this->setAttribute(Qt::WA_WState_OwnSizePolicy, false);
+    }
+  // d->Slider will take care of calling updateGeometry
   d->Slider->setOrientation(newOrientation);
 }
 

+ 14 - 2
Libs/Widgets/ctkDoubleSlider.cpp

@@ -89,8 +89,8 @@ void ctkDoubleSliderPrivate::init()
   q->connect(this->Slider, SIGNAL(rangeChanged(int, int)),
              q, SLOT(onRangeChanged(int, int)));
 
-  q->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed,
-                               QSizePolicy::Slider));
+  q->setSizePolicy(this->Slider->sizePolicy());
+  q->setAttribute(Qt::WA_WState_OwnSizePolicy, false);
 }
   
 // --------------------------------------------------------------------------
@@ -344,6 +344,18 @@ Qt::Orientation ctkDoubleSlider::orientation()const
 void ctkDoubleSlider::setOrientation(Qt::Orientation newOrientation)
 {
   Q_D(ctkDoubleSlider);
+  if (this->orientation() == newOrientation)
+    {
+    return;
+    }
+  if (!testAttribute(Qt::WA_WState_OwnSizePolicy))
+    {
+    QSizePolicy sp = this->sizePolicy();
+    sp.transpose();
+    this->setSizePolicy(sp);
+    this->setAttribute(Qt::WA_WState_OwnSizePolicy, false);
+    }
+  // d->Slider will take care of calling updateGeometry
   d->Slider->setOrientation(newOrientation);
 }