wxDialog 工作正常,但 wxFileDialog 调用导致程序未终止
wxDialog works fine but a wxFileDialog call results in program not terminating
与上次类似的问题。我运行代码,退出它。GUI 消失了,它似乎已完全退出,但我检查了我的进程列表,代码仍然保存着内存。
我已将其缩小到对wxFileDialog的调用。我不明白我做错了什么,因为我调用的方式与调用 wxDialog 的方式非常相似。wxDialog 调用不会导致此问题,但 wxFileDialog 会导致此问题。
工作正常:
// Help Dialog
void MyFrame::OnHelp(wxCommandEvent& WXUNUSED(event))
{
wxBoxSizer *topsizer;
wxHtmlWindow *html;
wxDialog dlg(this, wxID_ANY, wxString(_("Help")));
topsizer = new wxBoxSizer(wxVERTICAL);
html = new wxHtmlWindow(&dlg, wxID_ANY, wxDefaultPosition,
wxSize(380, 160), wxHW_SCROLLBAR_NEVER);
html->SetBorders(0);
html->LoadPage(wxT("data/help.html"));
// Fit the HTML window to the size of its contents
html->SetSize(html->GetInternalRepresentation()->GetWidth(),
html->GetInternalRepresentation()->GetHeight());
topsizer->Add(html, 1, wxALL, 10);
wxButton *but = new wxButton(&dlg, wxID_OK, _("OK"));
but->SetDefault();
topsizer->Add(but, 0, wxALL | wxALIGN_RIGHT, 15);
dlg.SetSizer(topsizer);
topsizer->Fit(&dlg);
dlg.CentreOnParent();
dlg.ShowModal();
}
原因问题:
void MyFrame::OnVidFile(wxCommandEvent& WXUNUSED(event))
{
wxString caption = wxT("Choose a file");
wxString wildcard = wxT("AVI files (*.avi)|*.avi");
wxString defaultDir = wxGetHomeDir();
wxString defaultFilename = wxEmptyString;
wxFileDialog dialog(this, caption, defaultDir, defaultFilename, wildcard, wxOPEN | wxFILE_MUST_EXIST );
dialog.CentreOnParent();
if(dialog.ShowModal() == wxID_OK) // problem
pathVid = dialog.GetPath().c_str();
}
这会导致程序无法正确终止,即使我抛出一个对话框。销毁(); 或对话框。关闭();在最后。对我来说,它们看起来像对对话类的类似调用?
我在这里错过了什么吗?
问题是与OpenCV(特别是HighGUI)的冲突。
若要避免此问题和 OLE 错误问题,请重写 WxWidgets 初始化基类虚拟,如下所示:
bool MywxApp::Initialize( int& argc, wxChar **argv )
{
::CoUninitialize();
return wxApp::Initialize( argc, argv );
}
相关文章:
- 声明一个变量,该变量在 c++ 或 c 中具有值,当程序终止时不会被销毁
- 程序终止时调用函数
- 当主终端关闭时,程序终止
- 程序终止,状态为 -1073741510 在 for 循环的中间,将输入分配给二维数组
- 条件运算符不允许程序终止
- 尝试对对象数组进行排序时程序终止
- 程序终止索引外部
- 程序终止,而不是继续整数输入验证循环
- 程序终止时堆栈损坏?
- 如何使用unique_ptr声明调用构造函数并处理程序终止信号
- 使用 ASSERT_DEATH 时,有没有办法在应用程序终止后自动继续执行所有测试
- C++输入超过 11 个整数时程序终止
- 程序终止:使用向量集的向量
- 我该如何验证给定类的每个实例都被应用程序终止所破坏
- 程序终止时,仪器不会捕获未删除对象
- C程序终止
- 正确关闭应用程序:终止程序的替代方案
- 程序终止C++时访问冲突
- 我需要循环这个,并在给出字符串 -1 时让程序终止
- 绑定错误 98 "Address in use"应用程序终止后仍然存在