Вообще проблем с передачей подключения не должно быть и с закрытием этих подключений - идея о содержании своего подключения в каждом потоке правильная. Тем более что передавать то ничего не надо так как сам класс 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.
Все это выдержки из офф. документации в ассистент - этот класс очень удобен и его никуда не нужно передавать - достаточно создать экземпляр в своей функции и работать!