My application contained several functions like this:
void SomeClass::set_data_provider(DataProvider *data_provider)
{
connect(data_provider, SIGNAL(data_ava
For completeness, here is an extension of @hank’s answer. I provide six connect
-like functions:
connect_from_pointer
takes a QSharedPointer as its first argument and the usual QObject *
as its third argument.connect_to_pointer
takes the usual QObject *
as its first argument and a QSharedPointer as its third argument.connect_pointers
takes QSharedPointers for both parameters.There are two versions of each of these: one that accepts the SIGNAL()
/SLOT()
syntax and one that accepts the (recommended) function pointers.
These are syntactically atrocious, but that’s templates for you.
template
QMetaObject::Connection connect_from_pointer(
const QSharedPointer& sender,
const char *signal,
const QObject *receiver,
const char *method,
Qt::ConnectionType type = Qt::AutoConnection)
{
return QObject::connect(sender.data(), signal, receiver, method, type);
}
template
QMetaObject::Connection connect_from_pointer(
const QSharedPointer::Object>& sender,
Func1 signal,
const typename QtPrivate::FunctionPointer::Object *receiver,
Func2 slot,
Qt::ConnectionType type = Qt::AutoConnection)
{
return QObject::connect(sender.data(), signal, receiver, slot, type);
}
template
QMetaObject::Connection connect_to_pointer(
const QObject *sender,
const char *signal,
const QSharedPointer& receiver,
const char *method,
Qt::ConnectionType type = Qt::AutoConnection)
{
return QObject::connect(sender, signal, receiver.data(), method, type);
}
template
QMetaObject::Connection connect_to_pointer(
const typename QtPrivate::FunctionPointer::Object *sender,
Func1 signal,
const QSharedPointer::Object>& receiver,
Func2 slot,
Qt::ConnectionType type = Qt::AutoConnection)
{
return QObject::connect(sender, signal, receiver.data(), slot, type);
}
template
QMetaObject::Connection connect_pointers(
const QSharedPointer& sender,
const char *signal,
const QSharedPointer& receiver,
const char *method,
Qt::ConnectionType type = Qt::AutoConnection)
{
return QObject::connect(sender.data(), signal, receiver.data(), method, type);
}
template
QMetaObject::Connection connect_pointers(
const QSharedPointer::Object>& sender,
Func1 signal,
const QSharedPointer::Object>& receiver,
Func2 slot,
Qt::ConnectionType type = Qt::AutoConnection)
{
return QObject::connect(sender.data(), signal, receiver.data(), slot, type);
}