QProgressDialog+多线程,不要使用python
时间: 2024-03-28 16:13:18 浏览: 109
Qt 使用多线程QThread实现进度条
4星 · 用户满意度95%
作为AI语言模型,我不涉及具体编程语言和库的使用。但是,以下是一个使用QProgressDialog和多线程的示例,供您参考:
```cpp
#include <QApplication>
#include <QProgressDialog>
#include <QThread>
class WorkerThread : public QThread
{
public:
void run() override
{
for (int i = 0; i < 100000; ++i) {
// Perform time-consuming operation here
if (i % 100 == 0) {
emit progressChanged(i / 1000);
}
}
emit finished();
}
signals:
void progressChanged(int value);
void finished();
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QProgressDialog progressDialog("Calculating...", "Cancel", 0, 100, nullptr);
progressDialog.setWindowModality(Qt::WindowModal);
progressDialog.setMinimumDuration(0);
WorkerThread workerThread;
QObject::connect(&workerThread, &WorkerThread::progressChanged, &progressDialog, &QProgressDialog::setValue);
QObject::connect(&workerThread, &WorkerThread::finished, &progressDialog, &QProgressDialog::hide);
QObject::connect(&progressDialog, &QProgressDialog::canceled, &workerThread, &WorkerThread::terminate);
workerThread.start();
progressDialog.exec();
return app.exec();
}
```
在这个例子中,我们创建了一个QProgressDialog并将其设置为模态窗口。然后,我们创建了一个WorkerThread类,该类继承自QThread。在run()函数中,我们执行耗时的操作,并在每100次迭代后发出progressChanged信号。最后,我们发出finished信号,表示线程已经完成。
在main()函数中,我们连接progressChanged和finished信号到QProgressDialog的setValue()和hide()函数。我们还连接了QProgressDialog的canceled信号到WorkerThread的terminate()函数,以便用户可以取消操作。
最后,我们启动WorkerThread,并执行QProgressDialog。一旦用户点击“Cancel”按钮或WorkerThread完成,QProgressDialog将被关闭。
阅读全文