Вообще проблем с передачей подключения не должно быть и с закрытием этих подключений - идея о содержании своего подключения в каждом потоке правильная. Тем более что передавать то ничего не надо так как сам класс QSqlDatabase так устроен что с ним можно работать так:
C++ (Qt)
bool CSomeClass::some_DB_func()
{
// получаем экземпляр класса БД подключения - причем можно взять подключение по умолчанию
// можно создать копию подключения по умолчанию - через функцию clone()
// можно вообще взять именованное подключение - второй параметр означает открывать соединение если оно не открыто
QSqlDatabase db = QSqlDatabase::database( m_sConnectionName, false );
// можно проверить установлено ли подключение и установить если надо (т.к. второй параметр в QSqlDatabase::database указан false)
bool b = db.open();
qDebug() << m_sOpenDatabase << b;
b = b && db.transaction();
qDebug() << m_sStartTran << b;
// далее можно работать с этим экземпляром, создавать на его основе запросы и др.
QSqlQuery pQuery = new QSqlQuery( db );
// после можно подтвердить или отменить сделанные изменения и закрыть соединение
db.commit();
db.close();
// при выходе за пределы видимости класс QSqlDatabase будет корректно уничтожен причем [b]без потери ресурсов и ворнинга[/b]
}
Вообще QSqlDatabase is a value class. что определяет особенности работы с ним: Changes made to a database connection via one instance of QSqlDatabase will affect other instances of QSqlDatabase that represent the same connection.
Все это выдержки из офф. документации в ассистент - этот класс очень удобен и его никуда не нужно передавать - достаточно создать экземпляр в своей функции и работать!