summaryrefslogtreecommitdiffstats
path: root/src/corelib
diff options
context:
space:
mode:
authorKent Hansen <khansen@trolltech.com>2009-06-05 11:05:24 (GMT)
committerKent Hansen <khansen@trolltech.com>2009-06-05 12:03:40 (GMT)
commit4acabb3abd0ff109b9abeedb6832f5b1c3e0cc4e (patch)
tree76b183192356a216f9084a938d7f3a87a1f4e262 /src/corelib
parentf101435831bb06f342bb0e2241e3011073341617 (diff)
downloadQt-4acabb3abd0ff109b9abeedb6832f5b1c3e0cc4e.zip
Qt-4acabb3abd0ff109b9abeedb6832f5b1c3e0cc4e.tar.gz
Qt-4acabb3abd0ff109b9abeedb6832f5b1c3e0cc4e.tar.bz2
handle qreal properties correctly in the meta-object system
When cross-compiling, it's possible that the size of qreal for moc itself (host platform) is different from the size of qreal on the target platform. Thus, we should not encode the metatype-id of qreal at moc time. Instead, use QMetaType::QReal in the generated code so that the the property flags are only derived at compile time. We also need to support the pesky QT_COORD_TYPE. In this case, qreal can be _any_ type (not just float or double), so we encode the property type as 0 and have a special check in QMetaProperty::type() that resolves the correct type at runtime. Reviewed-by: Simon Hausmann
Diffstat (limited to 'src/corelib')
-rw-r--r--src/corelib/global/qglobal.h1
-rw-r--r--src/corelib/kernel/qmetaobject.cpp5
-rw-r--r--src/corelib/kernel/qmetatype.cpp1
-rw-r--r--src/corelib/kernel/qmetatype.h9
-rw-r--r--src/corelib/kernel/qobjectdefs.h2
5 files changed, 17 insertions, 1 deletions
diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h
index 3990c7d..a10b6d6 100644
--- a/src/corelib/global/qglobal.h
+++ b/src/corelib/global/qglobal.h
@@ -1004,6 +1004,7 @@ typedef int QNoImplicitBoolCast;
#define QT_NO_FPU
#endif
+// This logic must match the one in qmetatype.h
#if defined(QT_COORD_TYPE)
typedef QT_COORD_TYPE qreal;
#elif defined(QT_NO_FPU) || defined(QT_ARCH_ARM) || defined(QT_ARCH_WINDOWSCE)
diff --git a/src/corelib/kernel/qmetaobject.cpp b/src/corelib/kernel/qmetaobject.cpp
index b65f956..6f3316c 100644
--- a/src/corelib/kernel/qmetaobject.cpp
+++ b/src/corelib/kernel/qmetaobject.cpp
@@ -2003,6 +2003,11 @@ QVariant::Type QMetaProperty::type() const
if (enumMetaTypeId == 0)
return QVariant::Int;
}
+#ifdef QT_COORD_TYPE
+ // qreal metatype must be resolved at runtime.
+ if (strcmp(typeName(), "qreal") == 0)
+ return QVariant::Type(qMetaTypeId<qreal>());
+#endif
return QVariant::UserType;
}
diff --git a/src/corelib/kernel/qmetatype.cpp b/src/corelib/kernel/qmetatype.cpp
index ce10bae..a0b954f 100644
--- a/src/corelib/kernel/qmetatype.cpp
+++ b/src/corelib/kernel/qmetatype.cpp
@@ -179,6 +179,7 @@ QT_BEGIN_NAMESPACE
\omitvalue LastCoreExtType
\omitvalue LastCoreType
\omitvalue LastGuiType
+ \omitvalue QReal
Additional types can be registered using Q_DECLARE_METATYPE().
diff --git a/src/corelib/kernel/qmetatype.h b/src/corelib/kernel/qmetatype.h
index 648f933..be8a667 100644
--- a/src/corelib/kernel/qmetatype.h
+++ b/src/corelib/kernel/qmetatype.h
@@ -86,6 +86,15 @@ public:
UShort = 133, UChar = 134, Float = 135, QObjectStar = 136, QWidgetStar = 137,
LastCoreExtType = 137 /* QWidgetStar */,
+// This logic must match the one in qglobal.h
+#if defined(QT_COORD_TYPE)
+ QReal = 0,
+#elif defined(QT_NO_FPU) || defined(QT_ARCH_ARM) || defined(QT_ARCH_WINDOWSCE)
+ QReal = Float,
+#else
+ QReal = Double,
+#endif
+
User = 256
};
diff --git a/src/corelib/kernel/qobjectdefs.h b/src/corelib/kernel/qobjectdefs.h
index 3a22323..f5d08ce 100644
--- a/src/corelib/kernel/qobjectdefs.h
+++ b/src/corelib/kernel/qobjectdefs.h
@@ -55,7 +55,7 @@ class QByteArray;
class QString;
#ifndef Q_MOC_OUTPUT_REVISION
-#define Q_MOC_OUTPUT_REVISION 61
+#define Q_MOC_OUTPUT_REVISION 62
#endif
// The following macros are our "extensions" to C++