ust*_*ion 2 c++ user-interface qt mingw windows-vista
这涉及C++(MinGW),Qt,Windows Vista:
这一切都是在我用C++开发非GUI应用程序的时候.最近我决定尝试在Qt中使用GUI,并且遇到一些设计问题.
这是问题所在:
我正在使用while(getline(inputFileStream,stringLine)){...}所以我放置了QCoreApplication :: processEvents(); 在循环内.
应用程序变得非常慢.所以我放置了一个计数器,只有当它达到特定值时才会出现QCoreApplication :: processEvents(); 被执行.
现在,gif动画变得更像一系列帧,从一个帧到另一个可见的过渡.
任何更快的触发processEvents()都会降低应用程序的速度(无论如何,它都不能靠近非GUI执行时间).
正如我在Windows任务管理器中看到的那样,一个核心具有高利用率,而另一个核心在执
那我应该采取什么方法?我应该深入研究变异(我从未使用过它)吗?
剥离一切来解释程序看起来像这样的问题:
class Animation;
class FileProcessing;
main(int argc,char** argv) {
QApplication* app=new QApplication(argc,argv);
QLabel* label1=new QLabel(...);
QLabel* label2=new QLabel(...);
Animation* objAnim=new Animation(...); //QMovie plays gif
objAnim->show();
//fileDialogs --> ask for files..this is modal so animation is fine till this point
FileProcessing* objFileProcessing=new FileProcessing(...);
objFileProcessing->processFiles(label1,label2); //process >2GB files
//in this i repeatedly call processEvents() as written above
//delete labels,objAnim and objFileProcessing;
delete app;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
是时候让你成长一些球并学习如何使用线程.GUI冻结,因为它在与处理这些大文件的函数相同的线程中运行.如果将这些任务分开以在不同的线程中执行,则GUI可以继续使用.
既然您对Qt感兴趣,我建议您阅读有关QThread的内容: