--- a/src/gui/itemviews/qtreeview.cpp
+++ b/src/gui/itemviews/qtreeview.cpp
@@ -188,6 +188,8 @@
     : QAbstractItemView(*new QTreeViewPrivate, parent)
 {
     Q_D(QTreeView);
+    const int smallIconSize = style()->pixelMetric(QStyle::PM_SmallIconSize);
+    d->indent = smallIconSize + smallIconSize/4;
     d->initialize();
 }
 
@@ -371,14 +373,14 @@
 int QTreeView::indentation() const
 {
     Q_D(const QTreeView);
-    return d->indent;
+    return qAbs(d->indent);
 }
 
 void QTreeView::setIndentation(int i)
 {
     Q_D(QTreeView);
-    if (i != d->indent) {
-        d->indent = i;
+    if (i != indentation()) {
+        d->indent = -i;
         d->viewport->update();
     }
 }
@@ -1729,7 +1731,7 @@
 {
     Q_D(const QTreeView);
     const bool reverse = isRightToLeft();
-    const int indent = d->indent;
+    const int indent = qAbs(d->indent);
     const int outer = d->rootDecoration ? 0 : 1;
     const int item = d->current;
     const QTreeViewItem &viewItem = d->viewItems.at(item);
@@ -2016,6 +2018,12 @@
 void QTreeView::doItemsLayout()
 {
     Q_D(QTreeView);
+    if (d->indent > 0)
+    {
+        const int smallIconSize = style()->pixelMetric(QStyle::PM_SmallIconSize);
+        d->indent = smallIconSize + smallIconSize/4;
+    }
+
     if (d->hasRemovedItems) {
         //clean the QSet that may contains old (and this invalid) indexes
         d->hasRemovedItems = false;
@@ -3248,7 +3256,7 @@
     int level = viewItems.at(item).level;
     if (rootDecoration)
         ++level;
-    return level * indent;
+    return level * qAbs(indent);
 }
 
 int QTreeViewPrivate::itemHeight(int item) const
@@ -3566,6 +3574,7 @@
     int size = header->sectionSize(0);
 
     QRect rect;
+    const int indent = qAbs(this->indent);
     if (q->isRightToLeft())
         rect = QRect(position + size - itemIndentation, coordinateForItem(viewItemIndex),
                      indent, itemHeight(viewItemIndex));
