diff --git a/src/libs/qtcreatorcdbext/symbolgroupvalue.cpp b/src/libs/qtcreatorcdbext/symbolgroupvalue.cpp
index 30b99117c661430ceeef73ddec81b06de18fc2c5..8d58a3ab8bc245be7567960245a3a7d0b5e8c653 100644
--- a/src/libs/qtcreatorcdbext/symbolgroupvalue.cpp
+++ b/src/libs/qtcreatorcdbext/symbolgroupvalue.cpp
@@ -1631,13 +1631,13 @@ static inline unsigned padOffset(unsigned offset)
 
 /* Return the offset to be accounted for "QSharedData" to access
  * the first member of a QSharedData-derived class */
-static unsigned qSharedDataOffset(const SymbolGroupValueContext &ctx)
+static unsigned qSharedDataSize(const SymbolGroupValueContext &ctx)
 {
     unsigned offset = 0;
     if (!offset) {
         // As of 4.X, a QAtomicInt, which will be padded to 8 on a 64bit system.
         const std::string qSharedData = QtInfo::get(ctx).prependQtCoreModule("QSharedData");
-        offset = padOffset(SymbolGroupValue::sizeOf(qSharedData.c_str()));
+        offset = SymbolGroupValue::sizeOf(qSharedData.c_str());
     }
     return offset;
 }
@@ -1738,7 +1738,8 @@ enum QPrivateDumpMode // Enumeration determining the offsets to be taken into co
 {
     QPDM_None,
     QPDM_qVirtual, // For classes with virtual functions (QObject-based): Skip vtable for d-address
-    QPDM_qSharedData // Private class is based on QSharedData.
+    QPDM_qSharedData, // Private class is based on QSharedData, non-padded type
+    QPDM_qSharedDataPadded // Private class is based on QSharedData, padded type (class)
 };
 
 // Determine the address of private class member by dereferencing the d-ptr and using offsets.
@@ -1758,8 +1759,11 @@ static ULONG64 addressOfQPrivateMember(const SymbolGroupValue &v, QPrivateDumpMo
         return 0;
     // Get address of type to be dumped.
     ULONG64 dumpAddress = dptr  + additionalOffset;
-    if (mode == QPDM_qSharedData) // Based on QSharedData
-        dumpAddress += qSharedDataOffset(v.context());
+    if (mode == QPDM_qSharedData) { // Simple type following QSharedData
+        dumpAddress += qSharedDataSize(v.context());
+    } else if (mode == QPDM_qSharedDataPadded) {
+        dumpAddress += padOffset(qSharedDataSize(v.context()));
+    }
     return dumpAddress;
 }
 
@@ -1810,7 +1814,7 @@ static bool dumpQByteArrayFromQPrivateClass(const SymbolGroupValue &v,
  * Dump 2nd string past its QSharedData base class. */
 static inline bool dumpQFileInfo(const SymbolGroupValue &v, std::wostream &str)
 {
-    return dumpQStringFromQPrivateClass(v, QPDM_qSharedData, qStringSize(v.context()),  str);
+    return dumpQStringFromQPrivateClass(v, QPDM_qSharedDataPadded, qStringSize(v.context()),  str);
 }
 
 /* Dump QDir, for whose private class no debugging information is available.
@@ -1822,14 +1826,14 @@ static bool inline dumpQDir(const SymbolGroupValue &v, std::wostream &str)
     const unsigned offset = padOffset(listSize + 2 * SymbolGroupValue::intSize())
             + padOffset(SymbolGroupValue::pointerSize() + SymbolGroupValue::sizeOf("bool"))
             + 2 * listSize;
-    return dumpQStringFromQPrivateClass(v, QPDM_qSharedData, offset,  str);
+    return dumpQStringFromQPrivateClass(v, QPDM_qSharedDataPadded, offset,  str);
 }
 
 /* Dump QRegExp, for whose private class no debugging information is available.
  * Dump 1st string past of its base class. */
 static inline bool dumpQRegExp(const SymbolGroupValue &v, std::wostream &str)
 {
-    return dumpQStringFromQPrivateClass(v, QPDM_qSharedData, 0,  str);
+    return dumpQStringFromQPrivateClass(v, QPDM_qSharedDataPadded, 0,  str);
 }
 
 /* Dump QFile, for whose private class no debugging information is available.
@@ -2072,7 +2076,11 @@ static bool dumpQTime(const SymbolGroupValue &v, std::wostream &str)
 // from memory.
 static bool dumpQDateTime(const SymbolGroupValue &v, std::wostream &str)
 {
-    const ULONG64 dateAddr = addressOfQPrivateMember(v, QPDM_qSharedData, 0);
+    // QDate is 64bit starting from Qt 5 which is always aligned 64bit.
+    const int qtVersion = QtInfo::get(v.context()).version;
+       const ULONG64 dateAddr = qtVersion < 5 ?
+       addressOfQPrivateMember(v, QPDM_qSharedData, 0) :
+       addressOfQPrivateMember(v, QPDM_None, 8);
     if (!dateAddr)
         return false;
     const int date =
@@ -2084,7 +2092,7 @@ static bool dumpQDateTime(const SymbolGroupValue &v, std::wostream &str)
     }
     if (!dumpJulianDate(date, str))
         return false;
-    const ULONG64 timeAddr = dateAddr + padOffset(SymbolGroupValue::intSize());
+    const ULONG64 timeAddr = dateAddr + (qtVersion < 5 ? SymbolGroupValue::intSize() : 8);
     const int time =
         SymbolGroupValue::readIntValue(v.context().dataspaces,
                                        timeAddr, SymbolGroupValue::intSize(), 0);