一、可以便捷的使用多线程并发类QtConcurrent解决
关于类的使用请参考博客:便捷的使用多线程并发类QtConcurrent解决Qt在槽函数中执行耗时操作导致界面卡住的问题_吻等离子的博客-CSDN博客
二、出现问题
QT使用全局db,提示QSqlDatabasePrivate::database: requested database does not belong to the calling thread.
2.1 问题原因
Qt数据库由QSqlDatabase::addDatabase()生成的QSqlDatabase只能在创建它的线程中使用, 在多线程中共用连接或者在另外一个线程中创建query都是不支持的。即主线程初始化的数据库只能在主线程中使用,子线程初始化的数据库只能自子线程用。
所以解决办法就是在线程中创建,在线程中释放
2.2需要注意的问题
释放的时候需要注意
在断开与数据库的链接时,必须释放该连接的所有查询,即删除所有与该连接有关的query;同时在释放该连接时,需要先获取该连接的连接名,然后先关闭当前数据库,并将当前数据库使用默认构造函数覆盖,最后再移除当前连接。
三、直接上代码
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)