解决QSql 执行exec函数卡住问题

当使用QSqlQuery执行exec函数时,遇到断网情况会导致UI线程堵塞,影响用户体验。为解决此问题,可以将数据库操作放入线程中。但需注意,主线程和子线程各自只能操作所属线程的QSqlDatabase open操作。解决方案包括在主线程和子线程分别打开数据库连接,或直接将主线程的数据库实例传递给子线程。通过查询特定表来判断网络连接状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、问题

  1. 软件与数据库通讯过程遇到断网时,QSqlQuery query执行exec(sql)时堵塞,必须等到系统设定的断网检测超时时间后,才会返回,此时执行exec的为UI线程,那么容易出现界面长时间卡顿问题;

  1. 将数据库的部分操作,或者数据库联网查询功能放入线程中执行,避免问题1出现,此时会遇到异常:QSqlDatabasePrivate::database: requested database does not belong to the calling thread.

二、问题解决

首先我们还是得用线程去处理面临会存在断网导致的界面卡滞问题,毕竟这个关系用户体验,第二必须记住一点,主线程和子线程只认可当前线程所属的QSqlDatabase的open操作,因此大家可能会存在上述的问题2,如何解决呢?

思路1:在主线程中定义一个QSqlDatabase db_maindb;子线程中定义QSqlDatabase db_slovedb;分别配置一样的连接服务器参数,随后分别执行db_maindb.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

漂流中

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值