2018-02-26 09:39:53 +01:00
|
|
|
/******************************************************************************
|
|
|
|
* QSkinny - Copyright (C) 2016 Uwe Rathmann
|
|
|
|
* This file may be used under the terms of the 3-clause BSD License
|
|
|
|
*****************************************************************************/
|
|
|
|
|
|
|
|
#include "Invoker.h"
|
2018-02-27 17:47:23 +01:00
|
|
|
#include <QCoreApplication>
|
2018-02-26 09:39:53 +01:00
|
|
|
#include <QDebug>
|
2018-02-27 17:47:23 +01:00
|
|
|
#include <QTimer>
|
2018-02-26 09:39:53 +01:00
|
|
|
|
|
|
|
static void debugValueI( int i )
|
|
|
|
{
|
|
|
|
qDebug() << i;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void debugValue( qreal d, int i )
|
|
|
|
{
|
|
|
|
qDebug() << d << i;
|
|
|
|
}
|
|
|
|
|
|
|
|
class MyObject : public QObject
|
|
|
|
{
|
2018-03-01 15:13:55 +01:00
|
|
|
Q_OBJECT
|
|
|
|
|
2018-02-26 09:39:53 +01:00
|
|
|
public:
|
|
|
|
MyObject( QObject* parent = nullptr ):
|
|
|
|
QObject( parent )
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
void print1( double d, int i ) const
|
|
|
|
{
|
|
|
|
qDebug() << d << i;
|
|
|
|
}
|
|
|
|
|
|
|
|
void print2( int i, double d ) const
|
|
|
|
{
|
|
|
|
qDebug() << i << d;
|
|
|
|
}
|
|
|
|
|
|
|
|
void print3( double d ) const
|
|
|
|
{
|
|
|
|
qDebug() << d;
|
|
|
|
}
|
|
|
|
|
|
|
|
void print4( int i ) const
|
|
|
|
{
|
|
|
|
qDebug() << i;
|
|
|
|
}
|
2018-03-01 15:13:55 +01:00
|
|
|
|
|
|
|
Q_SIGNALS:
|
|
|
|
void done( double, int );
|
|
|
|
};
|
|
|
|
|
|
|
|
class MyObject2: public MyObject
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
MyObject2( QObject* parent = nullptr ):
|
|
|
|
MyObject( parent )
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
virtual ~MyObject2()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
virtual void noop()
|
|
|
|
{
|
|
|
|
}
|
2018-02-26 09:39:53 +01:00
|
|
|
};
|
|
|
|
|
2018-03-01 15:13:55 +01:00
|
|
|
static auto fs = []( int i, double d ) { qDebug() << i << d; };
|
|
|
|
|
2018-02-26 09:39:53 +01:00
|
|
|
int main( int argc, char* argv[] )
|
|
|
|
{
|
2018-02-27 17:47:23 +01:00
|
|
|
QCoreApplication app( argc, argv );
|
2018-02-26 09:39:53 +01:00
|
|
|
|
|
|
|
MyObject object;
|
2018-03-01 15:13:55 +01:00
|
|
|
MyObject2 object2;
|
2018-02-26 09:39:53 +01:00
|
|
|
|
|
|
|
Invoker invoker;
|
|
|
|
|
2018-03-01 15:13:55 +01:00
|
|
|
invoker.addCallback( QskMetaFunction() );
|
|
|
|
#if 1
|
2018-02-26 09:39:53 +01:00
|
|
|
invoker.addCallback( debugValue );
|
|
|
|
invoker.addCallback( debugValueI );
|
|
|
|
invoker.addCallback( &object, &MyObject::print1 );
|
2018-03-01 15:13:55 +01:00
|
|
|
invoker.addCallback( &object2, &MyObject2::print1 );
|
2018-02-26 09:39:53 +01:00
|
|
|
invoker.addCallback( &object, &MyObject::print2 );
|
|
|
|
invoker.addCallback( &object, &MyObject::print3 );
|
|
|
|
invoker.addCallback( &object, &MyObject::print4 );
|
|
|
|
invoker.addCallback( &object, []( double d, int i ) { qDebug() << d << i; } );
|
2018-03-01 15:13:55 +01:00
|
|
|
|
|
|
|
int num = 111;
|
|
|
|
auto f = [&num]( int i, double d ) { qDebug() << i << d << (++num); };
|
|
|
|
invoker.addCallback( &object, f );
|
|
|
|
invoker.addCallback( &object2, f );
|
|
|
|
invoker.addCallback( &object, fs );
|
|
|
|
invoker.addCallback( &object2, fs );
|
|
|
|
|
2018-02-26 09:39:53 +01:00
|
|
|
invoker.addCallback( &object, []( double d ) { qDebug() << d; } );
|
|
|
|
invoker.addCallback( []() { qDebug() << "HERE"; } );
|
|
|
|
invoker.addCallback( []( int i, double d ) { qDebug() << i << d; } );
|
|
|
|
invoker.addCallback( []( int i ) { qDebug() << i; } );
|
|
|
|
invoker.addCallback( []( double d ) { qDebug() << d; } );
|
2018-03-01 15:13:55 +01:00
|
|
|
#endif
|
2018-02-26 09:39:53 +01:00
|
|
|
|
2018-03-01 15:13:55 +01:00
|
|
|
#if 1
|
2018-02-27 17:47:23 +01:00
|
|
|
qDebug() << "== Direct Connections";
|
|
|
|
invoker.invoke( 3.14, 35, Qt::DirectConnection );
|
|
|
|
|
|
|
|
qDebug() << "== Queued Connections";
|
|
|
|
|
|
|
|
QTimer::singleShot( 0,
|
|
|
|
[&invoker] { invoker.invoke( 0.07, 42, Qt::QueuedConnection ); } );
|
2018-03-01 15:13:55 +01:00
|
|
|
#endif
|
2018-02-27 17:47:23 +01:00
|
|
|
|
|
|
|
QTimer::singleShot( 100, &app, QCoreApplication::quit );
|
2018-03-01 15:13:55 +01:00
|
|
|
|
|
|
|
#if 0
|
|
|
|
QObject::connect( &object2, &MyObject2::done,
|
|
|
|
&object, &MyObject::print1 );
|
|
|
|
|
|
|
|
QObject::connect( &object2, &MyObject2::done, debugValue );
|
|
|
|
QObject::connect( &object2, &MyObject2::done, debugValueI );
|
|
|
|
QObject::connect( &object2, &MyObject2::done, &object, &MyObject::print1 );
|
|
|
|
QObject::connect( &object2, &MyObject2::done, &object2, &MyObject2::print1 );
|
|
|
|
QObject::connect( &object2, &MyObject2::done, &object, &MyObject::print2 );
|
|
|
|
QObject::connect( &object2, &MyObject2::done, &object, &MyObject::print3 );
|
|
|
|
QObject::connect( &object2, &MyObject2::done, &object, &MyObject::print4 );
|
|
|
|
QObject::connect( &object2, &MyObject2::done, &object, []( double d, int i ) { qDebug() << d << i; } );
|
|
|
|
|
|
|
|
int num2 = 111;
|
|
|
|
auto f2 = [&num2]( int i, double d ) { qDebug() << i << d << (++num2); };
|
|
|
|
QObject::connect( &object2, &MyObject2::done, &object, f2 );
|
|
|
|
QObject::connect( &object2, &MyObject2::done, &object2, f2 );
|
|
|
|
QObject::connect( &object2, &MyObject2::done, &object, fs );
|
|
|
|
QObject::connect( &object2, &MyObject2::done, &object2, fs );
|
|
|
|
|
|
|
|
QObject::connect( &object2, &MyObject2::done, &object, []( double d ) { qDebug() << d; } );
|
|
|
|
QObject::connect( &object2, &MyObject2::done, []() { qDebug() << "HERE"; } );
|
|
|
|
QObject::connect( &object2, &MyObject2::done, []( int i, double d ) { qDebug() << i << d; } );
|
|
|
|
QObject::connect( &object2, &MyObject2::done, []( int i ) { qDebug() << i; } );
|
|
|
|
QObject::connect( &object2, &MyObject2::done, []( double d ) { qDebug() << d; } );
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
2018-02-27 17:47:23 +01:00
|
|
|
return app.exec();
|
2018-02-26 09:39:53 +01:00
|
|
|
}
|
2018-03-01 15:13:55 +01:00
|
|
|
|
|
|
|
#include "main.moc"
|