我的应用程序读取mysql数据库并根据mysql查询绘制表。我想使用进度条,但我不能,因为QSqlDatabase进程冻结了我的主窗口。
我在某个地方读到,我应该分开gui和mysql进程的线程,并使用进程间通信,但找不到任何例子。在线程之间传输mysql查询的最佳方式是什么?
有两种方法可以防止GUI冻结:
-
将计算及时卸载到工作线程并进行通信
-
请求你的GUI线程处理它的一些挂起的消息事件循环。
我建议选择第二个选项,因为它很快,通常解决这类问题。但是请记住,这并不是一种干净的方法,应该把要求很高的计算从主GUI线程中挤出来。
第二种解决方案涉及在查询消费循环的某个地方放置单个函数调用。一般模式是:
While(query.next()){
...
QApplication::processEvents();
...
}