我对wxWidgets有一个奇怪的问题。我有以下代码
MyFrame::OnDoSomeLongThing(...) {
progScreen = new wxProgressDialog(text,text,number,this,wxPD_AUTO_HIDE); // wxProgressDialog *progScreen is class member
doPartOfThing() // calls the update method at the end of it
....
doLastPartOfThing() // again calls update method that pushes value to 100/100
progScreen->Destroy();
}
MyFrame::update() {
progScreen->Update(newValue);
}
现在就是这样。我可以直接注释掉与progScreen相关的行,只需让流程不使用进度对话框,毕竟说完成后,当我关闭主窗口时,我的应用程序会优雅地退出。
但是,只需使用进度对话框就可以延长应用程序的使用寿命。我已经尝试过Destroy(),我已经尝试过简单地'删除progScreen',并且每次都尝试:我将关闭主框架,进程继续运行,并且在某些时候退出并带有一些天文数字。我能想到的唯一可能是相关的是,doPartsOfThings方法可以调用boost :: this_thread :: sleep,因为它涉及在我的模型类中等待等等。但是这个不应该与我的问题有关。或许它确实...编辑:我想强调从主(GUI)线程调用progScreen-> Update()。
所以我问,我正确使用wxProgressDialog吗?如果没有,应该如何使用?
感谢您的帮助!
编辑:
嗯......结果是删除wxPD_AUTO_HIDE修复了问题。我仍然不太确定问题是什么,但对话甚至仍然像以前一样。应用程序按预期关闭。
答案 0 :(得分:0)
我认为您需要覆盖关闭应用程序的wxApp方法,以便在退出之前关闭wxProgressDialog对象。
wxApp :: OnExit
virtual int OnExit()
覆盖此成员函数以进行任何需要的处理 在应用程序即将退出时完成。之后调用OnExit 销毁所有应用程序窗口和控件,但在wxWidgets之前 清理。请注意,如果OnInit失败,则根本不会调用它。
此函数的返回值当前被忽略,返回 如果覆盖它,则与基类方法返回的值相同。
你需要这样的东西,假设progScreen是你框架的公共属性
int myApp::OnExit()
{
(MyFrame*)(GetTopWindow())->progScreen->Destroy()
return wxApp::OnExit();
}