我的任务很重。我创建了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();


结果如下:
c++ - QProgressBar和繁重的任务-LMLPHP

最佳答案

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

c++ - QProgressBar和繁重的任务-LMLPHP

我使用QThread(包含处理对象的工作线程),我只能建议您这样做。您还可以根据您的实际需要对QThread进行子类化并覆盖run()方法,但是这种情况很少见。

PS:作为替代方案,您可以使用QRunnable(对于偶尔执行一次且不需要始终管理单独线程的任务非常有用)。 QRunnable的问题在于它没有子类QObject,这意味着您不能使用插槽信号机制向UI报告。当然,您可以更改它,但是它违反了可运行性的目的,该目的是一种非常轻量级的解决方案。

关于c++ - QProgressBar和繁重的任务,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43149210/

10-11 04:07