是否可以在QT GUI应用程序中处理事件时播放加载动画指示器?

Is it possible to play loading animation indicator while processing event in QT GUI application?

本文关键字:播放 加载 动画 指示器 处理事件 QT 应用程序 GUI 是否      更新时间:2023-10-16

下面是我的代码,我已经解决了我的问题。Al 最后我在堆栈溢出团队的帮助下得到了解决方案。如果您在工作线程中执行长任务,则可以在主线程上播放动画(.gif文件(。其他事情与官方文档QPixmap一样不支持工作线程。所以我希望大家能对Qt开发人员有所帮助。

int worker::do_Work()
{
int i =0;
while (i<1000000)
{
qDebug()<<":count *i=========>"<<i;
i++;
}
qDebug()<<"Worker process finished in Thread "<<thread()->currentThreadId();
emit finished();
}
int mywidget::popup()
{
ui->label_2->setStyleSheet("background-color:rgb(85,255,127);border-radius:10px");
ui->label_2->setWindowFlags(Qt::FramelessWindowHint);
ui->label_2->setText("Please Wait..");
ui->label_2->setAutoFillBackground(true);
QMovie *movie = new QMovie(":images/loader.gif");
ui->label_2->setMovie(movie);
ui->label_2->show();
qDebug()<<"labele show";
movie->start();
myWorker = new worker;
WorkerThread = new QThread;
myWorker->moveToThread(WorkerThread);
connect(WorkerThread, SIGNAL(started()), myWorker, SLOT(do_Work()));
WorkerThread->start();
connect(myWorker, SIGNAL(finished()), ui->label_2, SLOT(close()));
return 0;
}

如果主循环因为处理事件而繁忙,则不会更新 GUI(因为 GUI 由主线程管理(。

当您有较长的处理任务时,请在其他线程中执行它们(或接受冻结您的 GUI(。


正如我所说,GUI 是并且必须在主线程中管理:

GUI 线程和工作线程

如前所述,每个程序在启动时都有一个线程。这 线程称为"主线程"(也称为"GUI 线程" Qt应用程序(。Qt GUI 必须在此线程中运行。所有小部件和 几个相关的类,例如QPixmap,在二级数据库中不起作用 线程。辅助线程通常称为"辅助线程" 线程",因为它用于从主线程卸载处理工作 线。