Qt4:如何在线程之间传递mysql查询?

时间:2015-07-22 17:30:07

标签: mysql multithreading qt4 qsqlquery qsqldatabase

我的应用程序读取mysql数据库并根据mysql查询绘制表。我想使用进度条,但我不能,因为QSqlDatabase进程冻结了我的主窗口。

我在某处读过,我应该分离gui和mysql进程的线程并使用进程间通信,但找不到任何示例。在线程之间传输mysql查询的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

有两种方法可以防止GUI冻结:

  • 将及时计算卸载到工作线程并进行通信 通过信号使用主GUI线程。

  • 要求您的GUI线程处理其中的一些待处理消息 事件循环。

我建议选择第二个选项,因为它很快并且通常可以解决这些问题。但请记住,这不是干净的做事方式,而是应该从主GUI线程中挤出苛刻的计算。

第二种解决方案涉及在查询消费循环中的某处调用单个函数调用。一般架构是:

While(query.next()){
    ...
    QApplication::processEvents();
    ...
}