@@ -326,6 +326,10 @@ class MyQObject : public QObject
326
326
{ emit mySignalWithDefaultArg (arg); }
327
327
void emitMySignalWithDefaultArg ()
328
328
{ emit mySignalWithDefaultArg (); }
329
+ void emitMySignalWithVariantArg (const QVariant &arg)
330
+ { emit mySignalWithVariantArg (arg); }
331
+ void emitMySignalWithScriptEngineArg (QScriptEngine *arg)
332
+ { emit mySignalWithScriptEngineArg (arg); }
329
333
330
334
public Q_SLOTS:
331
335
void mySlot ()
@@ -388,6 +392,8 @@ private Q_SLOTS:
388
392
void myOtherOverloadedSignal (const QString &arg);
389
393
void myOtherOverloadedSignal (int arg);
390
394
void mySignalWithDefaultArg (int arg = 123 );
395
+ void mySignalWithVariantArg (const QVariant &arg);
396
+ void mySignalWithScriptEngineArg (QScriptEngine *arg);
391
397
392
398
protected:
393
399
void connectNotify (const char *signal) {
@@ -1501,6 +1507,29 @@ void tst_QScriptExtQObject::connectAndDisconnect()
1501
1507
m_myObject->emitMyOtherOverloadedSignal (123 );
1502
1508
QVERIFY (!m_engine->evaluate (" gotSignal" ).toBoolean ());
1503
1509
1510
+ // signal with QVariant arg: argument conversion should work
1511
+ m_myObject->clearConnectedSignal ();
1512
+ QVERIFY (m_engine->evaluate (" myObject.mySignalWithVariantArg.connect(myHandler)" ).isUndefined ());
1513
+ QCOMPARE (m_myObject->connectedSignal ().constData (), SIGNAL (mySignalWithVariantArg (QVariant)));
1514
+ m_engine->evaluate (" gotSignal = false" );
1515
+ m_myObject->emitMySignalWithVariantArg (123 );
1516
+ QCOMPARE (m_engine->evaluate (" gotSignal" ).toBoolean (), true );
1517
+ QCOMPARE (m_engine->evaluate (" signalArgs.length" ).toNumber (), 1.0 );
1518
+ QCOMPARE (m_engine->evaluate (" signalArgs[0]" ).toNumber (), 123.0 );
1519
+ QVERIFY (m_engine->evaluate (" myObject.mySignalWithVariantArg.disconnect(myHandler)" ).isUndefined ());
1520
+
1521
+ // signal with argument type that's unknown to the meta-type system
1522
+ m_myObject->clearConnectedSignal ();
1523
+ QVERIFY (m_engine->evaluate (" myObject.mySignalWithScriptEngineArg.connect(myHandler)" ).isUndefined ());
1524
+ QCOMPARE (m_myObject->connectedSignal ().constData (), SIGNAL (mySignalWithScriptEngineArg (QScriptEngine*)));
1525
+ m_engine->evaluate (" gotSignal = false" );
1526
+ QTest::ignoreMessage (QtWarningMsg, " QScriptEngine: Unable to handle unregistered datatype 'QScriptEngine*' when invoking handler of signal MyQObject::mySignalWithScriptEngineArg(QScriptEngine*)" );
1527
+ m_myObject->emitMySignalWithScriptEngineArg (m_engine);
1528
+ QCOMPARE (m_engine->evaluate (" gotSignal" ).toBoolean (), true );
1529
+ QCOMPARE (m_engine->evaluate (" signalArgs.length" ).toNumber (), 1.0 );
1530
+ QVERIFY (m_engine->evaluate (" signalArgs[0]" ).isUndefined ());
1531
+ QVERIFY (m_engine->evaluate (" myObject.mySignalWithScriptEngineArg.disconnect(myHandler)" ).isUndefined ());
1532
+
1504
1533
// connect(object, function)
1505
1534
m_engine->evaluate (" otherObject = { name:'foo' }" );
1506
1535
QVERIFY (m_engine->evaluate (" myObject.mySignal.connect(otherObject, myHandler)" ).isUndefined ());
0 commit comments