History

first pass creating Qt <-> QtScript interface

Heather Anderson committed 4 years ago

Commit bc6eaf21 parent bd0455463 files · +1707 −294Browse files

Showing the changes to libraries/script-engine/src/qtscript/ScriptValueQtWrapper.cpp (1 of 63 files). Show all

Unified · Split

libraries/script-engine/src/qtscript/ScriptValueQtWrapper.cpp+26−6
@@ -28,19 +28,27 @@ ScriptValueQtWrapper* ScriptValueQtWrapper::unwrap(const ScriptValue& val) { · 27 unmodified lines
2828 QScriptValue ScriptValueQtWrapper::fullUnwrap(const ScriptValue& value) const {
2929 ScriptValueQtWrapper* unwrapped = unwrap(value);
3030 if (unwrapped) {
31− return unwrapped->toQtValue();
31+ if (unwrapped->engine().get() != _engine) {
32+ return static_cast<QScriptEngine*>(_engine)->toScriptValue(unwrapped->toVariant());
33+ } else {
34+ return unwrapped->toQtValue();
35+ }
3236 }
3337 QVariant varValue = value.toVariant();
34− return static_cast<QScriptEngine*>(_engine)->newVariant(varValue);
38+ return _engine->castVariantToValue(varValue);
3539 }
3640
3741 QScriptValue ScriptValueQtWrapper::fullUnwrap(ScriptEngineQtScript* engine, const ScriptValue& value) {
3842 ScriptValueQtWrapper* unwrapped = unwrap(value);
3943 if (unwrapped) {
40− return unwrapped->toQtValue();
44+ if (unwrapped->engine().get() != engine) {
45+ return static_cast<QScriptEngine*>(engine)->toScriptValue(unwrapped->toVariant());
46+ } else {
47+ return unwrapped->toQtValue();
48+ }
4149 }
4250 QVariant varValue = value.toVariant();
43− return static_cast<QScriptEngine*>(engine)->newVariant(varValue);
51+ return engine->castVariantToValue(varValue);
4452 }
4553
4654 ScriptValue ScriptValueQtWrapper::call(const ScriptValue& thisObject, const ScriptValueList& args) {
@@ -157,11 +165,23 @@ quint32 ScriptValueQtWrapper::toUInt32() const { · 110 unmodified lines
157165 }
158166
159167 QVariant ScriptValueQtWrapper::toVariant() const {
160− return _value.toVariant();
168+ QVariant dest;
169+ if (_engine->castValueToVariant(_value, dest, QMetaType::UnknownType)) {
170+ return dest;
171+ } else {
172+ Q_ASSERT(false);
173+ return QVariant();
174+ }
161175 }
162176
163177 QObject* ScriptValueQtWrapper::toQObject() const {
164− return _value.toQObject();
178+ QVariant dest;
179+ if (_engine->castValueToVariant(_value, dest, QMetaType::QObjectStar)) {
180+ return dest.value<QObject*>();
181+ } else {
182+ Q_ASSERT(false);
183+ return nullptr;
184+ }
165185 }
166186
167187 bool ScriptValueQtWrapper::equals(const ScriptValue& other) const {

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t