在Windows上使用C++,Qt的GUI设计问题(Vista)

ust*_*ion 2 c++ user-interface qt mingw windows-vista

这涉及C++(MinGW),Qt,Windows Vista:

这一切都是在我用C++开发非GUI应用程序的时候.最近我决定尝试在Qt中使用GUI,并且遇到一些设计问题.

这是问题所在:

  • 步骤1:使用QMovie加载并显示背景gif动画...
  • 第2步:处理巨大的转储文件(超过2GB)....所以当我到达第2步时,我的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)

kar*_*lip 5

是时候让你成长一些球并学习如何使用线程.GUI冻结,因为它在与处理这些大文件的函数相同的线程中运行.如果将这些任务分开以在不同的线程中执行,则GUI可以继续使用.

既然您对Qt感兴趣,我建议您阅读有关QThread的内容: