QProgressBar和繁重的任务

时间:2017-03-31 20:31:59

标签: c++ multithreading qt qprogressbar

我的任务很艰巨。我创建了QProgressBar来显示该程序仍在工作,并使用c ++ std :: thread类在另一个线程中运行繁重的任务。但QProgressBar不起作用,只有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();

结果如下: enter image description here

1 个答案:

答案 0 :(得分:1)

这不是事情的完成方式。 :) Here你可以看到我做的一个例子,它使用了Worker模式(一个单独的线程处理一些繁重的任务并报告回UI)。以下是我的应用程序的外观:

enter image description here

我使用QThread(包含处理处理的对象的工作线程),我只建议你这样做。你也可以继承QThread并覆盖run()方法,具体取决于你真正需要的方法,但这种情况很少见。

PS:作为替代方案,您可以使用QRunnable(对于每隔一段时间完成的任务非常有用,这些任务不需要一直管理单独的线程)。 QRunnable的问题在于它不是QObject的子类,这意味着您无法使用插槽信号机制向UI报告。当然你可以改变它,但它会破坏runnable的目的,这是一个非常轻量级的解决方案。