--- a/src/gui/styles/qplastiquestyle.cpp
+++ b/src/gui/styles/qplastiquestyle.cpp
@@ -5167,8 +5167,17 @@
     case CC_ScrollBar:
         if (const QStyleOptionSlider *scrollBar = qstyleoption_cast<const QStyleOptionSlider *>(option)) {
             int scrollBarExtent = proxy()->pixelMetric(PM_ScrollBarExtent, scrollBar, widget);
+
+            QStyle::SubControls subControls = option->subControls;
+            if (subControls == QStyle::SC_None)
+                subControls = QStyle::SC_All;
+            bool hasSubLineButton = subControls.testFlag(SC_ScrollBarSubLine);
+            bool hasAddLineButton = subControls.testFlag(SC_ScrollBarAddLine);
+            int subLineSize = hasSubLineButton ? scrollBarExtent : 0;
+            int addLineSize = hasAddLineButton ? scrollBarExtent : 0;
+
             int sliderMaxLength = ((scrollBar->orientation == Qt::Horizontal) ?
-                                   scrollBar->rect.width() : scrollBar->rect.height()) - (scrollBarExtent * 3);
+                                   scrollBar->rect.width() : scrollBar->rect.height()) - (2*subLineSize + addLineSize);
             int sliderMinLength = proxy()->pixelMetric(PM_ScrollBarSliderMin, scrollBar, widget);
             int sliderLength;
 
@@ -5185,51 +5194,58 @@
                 sliderLength = sliderMaxLength;
             }
 
-            int sliderStart = scrollBarExtent + sliderPositionFromValue(scrollBar->minimum,
-                                                           scrollBar->maximum,
-                                                           scrollBar->sliderPosition,
-                                                           sliderMaxLength - sliderLength,
-                                                           scrollBar->upsideDown);
+            int sliderStart = subLineSize + sliderPositionFromValue(scrollBar->minimum,
+                                                                    scrollBar->maximum,
+                                                                    scrollBar->sliderPosition,
+                                                                    sliderMaxLength - sliderLength,
+                                                                    scrollBar->upsideDown);
 
             QRect scrollBarRect = scrollBar->rect;
+            QRect rect;
 
             switch (subControl) {
             case SC_ScrollBarSubLine: // top/left button
-                if (scrollBar->orientation == Qt::Horizontal) {
-                    rect.setRect(scrollBarRect.left(), scrollBarRect.top(), scrollBarRect.width() - scrollBarExtent, scrollBarRect.height());
-                } else {
-                    rect.setRect(scrollBarRect.left(), scrollBarRect.top(), scrollBarRect.width(), scrollBarRect.height() - scrollBarExtent);
+                if (hasSubLineButton)
+                {
+                    if (scrollBar->orientation == Qt::Horizontal) {
+                        rect.setRect(scrollBarRect.left(), scrollBarRect.top(), scrollBarRect.width() - addLineSize, scrollBarRect.height());
+                    } else {
+                        rect.setRect(scrollBarRect.left(), scrollBarRect.top(), scrollBarRect.width(), scrollBarRect.height() - addLineSize);
+                    }
                 }
                 break;
             case SC_ScrollBarAddLine: // bottom/right button
-                if (scrollBar->orientation == Qt::Horizontal) {
-                    rect.setRect(scrollBarRect.right() - (scrollBarExtent - 1), scrollBarRect.top(), scrollBarExtent, scrollBarRect.height());
-                } else {
-                    rect.setRect(scrollBarRect.left(), scrollBarRect.bottom() - (scrollBarExtent - 1), scrollBarRect.width(), scrollBarExtent);
+                if (hasAddLineButton)
+                {
+                    if (scrollBar->orientation == Qt::Horizontal) {
+                        rect.setRect(scrollBarRect.right() - (addLineSize - 1), scrollBarRect.top(), addLineSize, scrollBarRect.height());
+                    } else {
+                        rect.setRect(scrollBarRect.left(), scrollBarRect.bottom() - (addLineSize - 1), scrollBarRect.width(), addLineSize);
+                    }
                 }
                 break;
             case SC_ScrollBarSubPage:
                 if (scrollBar->orientation == Qt::Horizontal) {
-                    rect.setRect(scrollBarRect.left() + scrollBarExtent, scrollBarRect.top(),
-                                 sliderStart - (scrollBarRect.left() + scrollBarExtent), scrollBarRect.height());
+                    rect.setRect(scrollBarRect.left() + subLineSize, scrollBarRect.top(),
+                                 sliderStart - (scrollBarRect.left() + subLineSize), scrollBarRect.height());
                 } else {
-                    rect.setRect(scrollBarRect.left(), scrollBarRect.top() + scrollBarExtent,
-                                 scrollBarRect.width(), sliderStart - (scrollBarRect.left() + scrollBarExtent));
+                    rect.setRect(scrollBarRect.left(), scrollBarRect.top() + subLineSize,
+                                 scrollBarRect.width(), sliderStart - (scrollBarRect.top() + subLineSize));
                 }
                 break;
             case SC_ScrollBarAddPage:
                 if (scrollBar->orientation == Qt::Horizontal)
                     rect.setRect(sliderStart + sliderLength, 0,
-                                 sliderMaxLength - sliderStart - sliderLength + scrollBarExtent, scrollBarRect.height());
+                                 sliderMaxLength - sliderStart - sliderLength + addLineSize, scrollBarRect.height());
                 else
                     rect.setRect(0, sliderStart + sliderLength,
-                                 scrollBarRect.width(), sliderMaxLength - sliderStart - sliderLength + scrollBarExtent);
+                                 scrollBarRect.width(), sliderMaxLength - sliderStart - sliderLength + addLineSize);
                 break;
             case SC_ScrollBarGroove:
                 if (scrollBar->orientation == Qt::Horizontal) {
-                    rect = scrollBarRect.adjusted(scrollBarExtent, 0, -2 * scrollBarExtent, 0);
+                    rect = scrollBarRect.adjusted(subLineSize, 0, -(subLineSize + addLineSize) , 0);
                 } else {
-                    rect = scrollBarRect.adjusted(0, scrollBarExtent, 0, -2 * scrollBarExtent);
+                    rect = scrollBarRect.adjusted(0, subLineSize, 0, -(subLineSize + addLineSize));
                 }
                 break;
             case SC_ScrollBarSlider:
