QProgressBar 和繁重的任务
QProgressBar and heavy task
我的任务很重。我创建了 QProgressBar 来显示该程序仍在工作,并使用 c++ std::thread class 在另一个线程中运行繁重的任务。但是 QProgressBar 不起作用,只有 window with QProgressBar 开始。
这是代码:
QProgressBar progress;
progress.setRange(0, 0);
progress.show();
if (keyLength == 1024)
std::thread(&RSA::generateKeys, &rsa, RSA::RSA_1024).join();
else if (keyLength == 2048)
std::thread(&RSA::generateKeys, &rsa, RSA::RSA_2048).join();
结果如下:
这不是做事的方式。 :) Here 您可以看到我制作的一个使用 Worker 模式的示例(一个单独的线程处理一些繁重的任务并向 UI 报告)。这是我的应用程序的外观:
我使用 QThread
(包含处理处理的对象的工作线程),我只能建议您也这样做。您还可以继承 QThread
并根据您的实际需要覆盖 run()
方法,但这种情况很少见。
PS:作为替代方案,您可以使用 QRunnable
(对于每隔一段时间完成一次不需要一直管理单独线程的任务非常有用) . QRunnable
的问题在于它不是 QObject
的子类,这意味着您不能使用槽信号机制向 UI 报告。当然你可以改变它,但它违背了 runnable 的目的,它旨在成为一个非常轻量级的解决方案。
我的任务很重。我创建了 QProgressBar 来显示该程序仍在工作,并使用 c++ std::thread class 在另一个线程中运行繁重的任务。但是 QProgressBar 不起作用,只有 window with QProgressBar 开始。 这是代码:
QProgressBar progress;
progress.setRange(0, 0);
progress.show();
if (keyLength == 1024)
std::thread(&RSA::generateKeys, &rsa, RSA::RSA_1024).join();
else if (keyLength == 2048)
std::thread(&RSA::generateKeys, &rsa, RSA::RSA_2048).join();
结果如下:
这不是做事的方式。 :) Here 您可以看到我制作的一个使用 Worker 模式的示例(一个单独的线程处理一些繁重的任务并向 UI 报告)。这是我的应用程序的外观:
我使用 QThread
(包含处理处理的对象的工作线程),我只能建议您也这样做。您还可以继承 QThread
并根据您的实际需要覆盖 run()
方法,但这种情况很少见。
PS:作为替代方案,您可以使用 QRunnable
(对于每隔一段时间完成一次不需要一直管理单独线程的任务非常有用) . QRunnable
的问题在于它不是 QObject
的子类,这意味着您不能使用槽信号机制向 UI 报告。当然你可以改变它,但它违背了 runnable 的目的,它旨在成为一个非常轻量级的解决方案。