一、问题
软件与数据库通讯过程遇到断网时,QSqlQuery query执行exec(sql)时堵塞,必须等到系统设定的断网检测超时时间后,才会返回,此时执行exec的为UI线程,那么容易出现界面长时间卡顿问题;
将数据库的部分操作,或者数据库联网查询功能放入线程中执行,避免问题1出现,此时会遇到异常:QSqlDatabasePrivate::database: requested database does not belong to the calling thread.
二、问题解决
首先我们还是得用线程去处理面临会存在断网导致的界面卡滞问题,毕竟这个关系用户体验,第二必须记住一点,主线程和子线程只认可当前线程所属的QSqlDatabase的open操作,因此大家可能会存在上述的问题2,如何解决呢?
思路1:在主线程中定义一个QSqlDatabase db_maindb;子线程中定义QSqlDatabase db_slovedb;分别配置一样的连接服务器参数,随后分别执行db_maindb.