我有一个用C ++ / Qt编写的程序来转换某些游戏文件。这是我第一次做这样的事情,所以我还没有特别的经验。我的窗口出现问题,偶尔显示“未响应...”消息。仔细阅读之后,问题似乎出在主线程中进行了处理,从而阻塞了gui。 因此,我尝试为完成的实际工作运行一个单独的线程,但是问题仍然存在。
以下是创建额外线程的部分:
QThread* thread = new QThread;
WKConverter* converter = new WKConverter(settings);
converter->moveToThread(thread);
connect(converter, SIGNAL(log(std::string)), this, SLOT(log(std::string)));
connect(converter, SIGNAL(setInfo(std::string)), this, SLOT(setInfo(std::string)));
connect(converter, SIGNAL(createDialog(std::string)), this, SLOT(createDialog(std::string)));
connect(converter, SIGNAL(createDialog(std::string, std::string)), this, SLOT(createDialog(std::string, std::string)));
connect(converter, SIGNAL(createDialog(std::string, std::string, std::string)), this, SLOT(createDialog(std::string, std::string, std::string)));
connect(converter, SIGNAL(setProgress(int)), this, SLOT(setProgress(int)));
connect(converter, SIGNAL(increaseProgress(int)), this, SLOT(increaseProgress(int)));
connect(thread, SIGNAL(started()), converter, SLOT(run(bool)));
connect(converter, SIGNAL(finished()), thread, SLOT(quit()));
connect(converter, SIGNAL(finished()), converter, SLOT(deleteLater()));
connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
thread->start();
converter->run();
带有信号/插槽以推动进度条的更新,并带有一个标签,指示正在处理的GUI。通常这是可行的,但是正如我所说的,我仍然会遇到“不响应...”的问题(尽管有趣的是,如果我使用Qt Creator进行调试,似乎只有在之后运行编译的exe时,这种情况才会发生)
我错过了什么吗?还有什么我需要做的吗?任何指针,我将不胜感激。
如果有帮助,这里是项目的github,尽管我还没有将在线程上完成的工作推到那里:https://github.com/Jineapple/WololoKingdoms