gpt4 book ai didi

c++ - wxDialog 工作正常,但 wxFileDialog 调用导致程序未终止

转载 作者:太空宇宙 更新时间:2023-11-04 14:23:15 25 4
gpt4 key购买 nike

和上次类似的问题。我运行代码,退出它。 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();
}

这会导致程序无法正确终止,即使我抛出一个 dialog.Destroy();或 dialog.Close();在最后。对我来说,它们看起来像是对对话类的类似调用?

我是不是漏掉了什么?

最佳答案

问题是与 OpenCV(特别是 HighGUI)的冲突。

要避免这个问题和OLE错误问题,重写WxWidgets初始化基类virtual如下:

bool MywxApp::Initialize( int& argc, wxChar **argv ) 
{
::CoUninitialize();
return wxApp::Initialize( argc, argv );
}

关于c++ - wxDialog 工作正常,但 wxFileDialog 调用导致程序未终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5915215/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com