0

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

结果如下: 在此处输入图像描述

4

1 回答 1

1

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

在此处输入图像描述

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

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

于 2017-03-31T20:48:24.060 回答