Item { width: 100.45; height: 150.82 }
\endqml
- \bold{Note:} In QML all reals are stored in single precision, \l
+ \bold{Note:} In QML all reals are stored in double precision, \l
{http://en.wikipedia.org/wiki/IEEE_754} {IEEE floating point}
format.
{ "int", strlen("int"), Object::DynamicProperty::Int, "int", strlen("int") },
{ "bool", strlen("bool"), Object::DynamicProperty::Bool, "bool", strlen("bool") },
{ "double", strlen("double"), Object::DynamicProperty::Real, "double", strlen("double") },
- { "real", strlen("real"), Object::DynamicProperty::Real, "qreal", strlen("qreal") },
+ { "real", strlen("real"), Object::DynamicProperty::Real, "double", strlen("double") },
{ "string", strlen("string"), Object::DynamicProperty::String, "QString", strlen("QString") },
{ "url", strlen("url"), Object::DynamicProperty::Url, "QUrl", strlen("QUrl") },
{ "color", strlen("color"), Object::DynamicProperty::Color, "QColor", strlen("QColor") },
--- /dev/null
+import Qt.test 1.0
+import QtQuick 2.0
+
+QtObject {
+ property real test: 1234567890
+ property real test2
+ property real test3
+ property real test4: test3
+ property real test5: func()
+ property real test6: test2 + test3
+
+ signal sig(real arg)
+
+ Component.onCompleted: {
+ test2 = 1234567890;
+ sig(1234567890)
+ }
+
+ onSig: { test3 = arg; }
+
+ function func() { return 1234567890; }
+}
void revisionErrors();
void revision();
void invokableWithQObjectDerived();
+ void realTypePrecision();
void automaticSemicolon();
void unaryExpression();
}
}
+void tst_qqmlecmascript::realTypePrecision()
+{
+ // Properties and signal parameters of type real should have double precision.
+ QQmlComponent component(&engine, testFileUrl("realTypePrecision.qml"));
+ QScopedPointer<QObject> object(component.create());
+ QVERIFY(object != 0);
+ QCOMPARE(object->property("test").toDouble(), 1234567890.);
+ QCOMPARE(object->property("test2").toDouble(), 1234567890.);
+ QCOMPARE(object->property("test3").toDouble(), 1234567890.);
+ QCOMPARE(object->property("test4").toDouble(), 1234567890.);
+ QCOMPARE(object->property("test5").toDouble(), 1234567890.);
+ QCOMPARE(object->property("test6").toDouble(), 1234567890.*2);
+}
+
QTEST_MAIN(tst_qqmlecmascript)
#include "tst_qqmlecmascript.moc"
--- /dev/null
+import QtQuick 2.0
+
+QtObject {
+ property double test: 1234567890
+}
import QtQuick 2.0
QtObject {
- property real test: 21
+ property real test: 1234567890
}
--- /dev/null
+import QtQuick 2.0
+
+QtObject {
+ signal testSignal(double foo)
+}
<< QByteArray("bool") << int(QMetaType::Bool)
<< true // default
<< QVariant(true) << true << QVariant(false);
+ QTest::newRow("double") << "property.double.qml"
+ << QByteArray("double") << int(QMetaType::Double)
+ << false // default
+ << QVariant(double(1234567890.))
+ << true // writable
+ << QVariant(double(1.23456789));
QTest::newRow("real") << "property.real.qml"
<< QByteArray("double") << int(QMetaType::Double)
<< false // default
- << QVariant(double(21))
+ << QVariant(double(1234567890.))
<< true // writable
- << QVariant(double(37));
+ << QVariant(double(1.23456789));
QTest::newRow("string") << "property.string.qml"
<< QByteArray("QString") << int(QMetaType::QString)
<< true // default
<< (QList<QByteArray>() << "QString")
<< (QList<QByteArray>() << "foo");
QTest::newRow("testSignal(int foo, bool bar, real baz)") << "signal.3.qml"
- << "testSignal(int,bool,qreal)"
+ << "testSignal(int,bool,double)"
<< QMetaMethod::Signal
<< ""
- << (QList<QByteArray>() << "int" << "bool" << "qreal")
+ << (QList<QByteArray>() << "int" << "bool" << "double")
<< (QList<QByteArray>() << "foo" << "bar" << "baz");
QTest::newRow("testSignal(variant foo, var bar)") << "signal.4.qml"
<< "testSignal(QVariant,QVariant)"
<< ""
<< (QList<QByteArray>() << "QColor" << "QDateTime" << "QUrl")
<< (QList<QByteArray>() << "foo" << "bar" << "baz");
+ QTest::newRow("testSignal(double foo)") << "signal.6.qml"
+ << "testSignal(double)"
+ << QMetaMethod::Signal
+ << ""
+ << (QList<QByteArray>() << "double")
+ << (QList<QByteArray>() << "foo");
}
void tst_QQmlMetaObject::method()