在Windows(Vista)上使用C++、Qt的GUI设计问题
GUI design issues using C++ , Qt on 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;
}
是时候让你长一些球并学习如何使用线程了。GUI冻结是因为它与处理那些大文件的函数在同一个线程中运行。如果将这些任务分开在不同的线程中执行,GUI可以继续可用。
既然你对Qt感兴趣,我建议你阅读QThread:
- QThreads简介
- 使用QThread启动线程
- 如何真正使用QThreads;完整解释
处理步骤需要使用单独的线程。
您可以让处理线程定期检查取消状态变量。如果用户希望取消,请将变量设置为true。然后,处理线程可以正常退出。
相关文章:
- Qt GUI使用Qfiledialogbox和qlabel显示视频,这是我的代码
- 试图打开并读取一个.txt文件,但它从原始文件中删除了实际文本(Qt GUI C++
- 是否可以在QT GUI应用程序中处理事件时播放加载动画指示器?
- 从其他std ::线程更新QT GUI
- 无法使用 Visual Studio 2010 和 Qt 版本 4.8.0 创建"Qt Gui Application"
- "hijacking" 给定根 QWidget* 的 Qt gui
- 尽管有线程,Qt GUI 仍挂起
- C++ Qt GUI update
- 在QT GUI中创建一个全局对象
- 在已经运行的C 控制台应用程序上实现QT GUI
- QT GUI最简单的方法可以从另一堂课访问MainWindow
- 通过Qt-tcp套接字更改Qt-GUI
- ROS-Qt GUI - 如何分发线程
- 由于线程问题,Qt-Gui没有更新
- 为Python逻辑创建一个C++Qt Gui
- Qt GUI应用程序在与GUI交互时停止实时进程
- 如何在C 中制作QT GUI应用,而不会内存泄漏
- 如何将QT GUI应用程序的版本打印到主机上
- 使用由Eclipse中的Qt设计器创建的Qt GUI
- Qt Gui 应用程序部署