Adjuntar señales y ranuras a un objeto dentro de un QSharedPointer

Mi aplicación contenía varias funciones como esta:

void SomeClass::set_data_provider(DataProvider *data_provider)
{
    connect(data_provider, SIGNAL(data_available(int)),
        this, SLOT(data_available(int)));
}

Para evitar pasar punteros crudos, he cambiado todas las apariciones deDataProvider * aQSharedPointer<DataProvider>. Este último es casi un reemplazo directo para el primero, excepto que no puede pasar un QSharedPointer aQObject::connect. Trabajé alrededor de esto extrayendo un puntero sin procesar del QSharedPointer:

void SomeClass::set_data_provider(QSharedPointer<DataProvider> data_provider)
{
    connect(data_provider.data(), SIGNAL(data_available(int)),
        this, SLOT(data_available(int)));
}

Esto parece funcionar bien, pero parece poco elegante y desconfío de acceder al puntero sin formato de esta manera. ¿Hay una mejor manera de conectarse a un objeto que se pasa en un QSharedPointer?

Respuestas a la pregunta(2)

Su respuesta a la pregunta