c++ - 在 Ubuntu 上使用 wxWidgets2.9.3 出错

标签 c++ ubuntu wxwidgets assert

我已经在 Ubuntu 10.10 上安装了 wxWidgets 2.9.3 ../configure --with-gtk
我正在使用 Codeblocks IDE,并在其上轻松运行了一个示例 Dialogs 程序。

但是当我尝试在 Windows、VS2010 (wxWidgets 2.9.2) 上运行我的工作代码时,我遇到了几个错误和运行时失败,如下所列

  1. 错误:“class wxBitmap”没有名为“UseAlpha”的成员
  2. 错误:“class wxPanel”没有名为“SetBackgroundBitmap”的成员
  3. 以下代码也会引发错误 assert "m_menuItem"failed in Enable(): invalid menu item

    wxMenuItem *undoMenuItem;
    wxMenu* editMenu = new wxMenu(_(""));
    undoMenuItem = new wxMenuItem(editMenu, idMenuUndo, _("&Undo\tCtrl+Z"), _("Undo the last action"));
    undoMenuItem->Enable(false);
    editMenu->Append(undoMenuItem);
    
  4. 如果我注释掉上面的代码,编译并运行,我得到 SIGSEGV 并且调用堆栈是

0 0x168f07a cairo_save() (/usr/lib/libcairo.so.2:??)
1 0x806520 wxCairoContext::PushState() () (/usr/local/lib/libwx_gtk2u_core-2.9.so.3:??)
2 0x805b38 wxCairoContext::Init(_cairo*) () (/usr/local/lib/libwx_gtk2u_core-2.9.so.3:??)
3 0x80736a wxCairoContext::wxCairoContext(wxGraphicsRenderer*, wxMemoryDC const&) () (/usr/local/lib/libwx_gtk2u_core-2.9.so.3:??)
4 0x807401 wxCairoRenderer::CreateContext(wxMemoryDC const&) () (/usr/local/lib/libwx_gtk2u_core-2.9.so.3:??)
5 0x822f06 wxGraphicsContext::Create(wxMemoryDC const&) () (/usr/local/lib/libwx_gtk2u_core-2.9.so.3:??)
6 0x7c54b7 wxGCDCImpl::wxGCDCImpl(wxDC*, wxMemoryDC const&) () (/usr/local/lib/libwx_gtk2u_core-2.9.so.3:??)
7 0x7c554e wxGCDC::wxGCDC(wxMemoryDC const&) () (/usr/local/lib/libwx_gtk2u_core-2.9.so.3:??)
8 0x80555fd Breadboard::reset(this=0x81713c0) (/home/vinayak/codes/IConBread/breadboard.cpp:79)
9 0x8054e57 Breadboard::Breadboard(this=0x81713c0) (/home/vinayak/codes/IConBread/breadboard.cpp:17)
10 0x805d7c5 Interface::Interface(this=0x8171200, parent=0x81703e0, width=900, height=570) (/home/vinayak/codes/IConBread/interface.cpp:24)
11 0x8069db4 MainFrame::MainFrame(this=0x8108af8, frame=0x0, title=...) (/home/vinayak/codes/IConBread/mainframe.cpp:127)
12 0x80525a8 Application::OnInit(this=0x80ab228) (/home/vinayak/codes/IConBread/application.cpp:27)
13 0x8053194 wxAppConsoleBase::CallOnInit(this=0x80ab228) (/usr/local/include/wx-2.9/wx/app.h:94)
14 0xc53000 wxEntry(int&, wchar_t**) () (/usr/local/lib/libwx_baseu-2.9.so.3:??)
15 0xc530d7 wxEntry(int&, char**) () (/usr/local/lib/libwx_baseu-2.9.so.3:??)
16 0x805245f main(argc=1, argv=0xbffff924) (/home/vinayak/codes/IConBread/application.cpp:19)

这些错误的可能原因是什么?请记住,在 Windows (VS2010) 上,这是一个完美的工作代码。
谢谢!

最佳答案

在 wxWidgets 开发人员的帮助下,我解决了上述问题。

  1. UseAlpha 是 MSW 特定的,所以我不能在 Linux 上使用它
  2. docs/changes.txt 建议
    wxPanel::SetBackgroundBitmap() 已被删除,从中派生您的类 wxCustomBackgroundWindow 并改用它的同名方法。
  3. 先将项目附加到菜单,然后再将其禁用,可解决问题。
  4. 此问题的解决方案引发了更多问题,但运行时错误消失了。
    我通过调用克服了运行时错误, 位图.Create(kWidth, kHeight, 32); 在访问位图对象的函数之前。在使用 bitmap 后调用此行,重新排序行解决了问题。
    但是,我现在无法通过 wxGCDC 获得透明度。

关于c++ - 在 Ubuntu 上使用 wxWidgets2.9.3 出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9076727/

相关文章:

c++ - LONG_PTR 的迭代器

c++ - 为什么 C++ 中未初始化(然后使用)的 int 不返回错误?

linux - 仅删除文件名中至少有一位数字的文件而不是目录

ruby-on-rails - 服务器重启后如何重启 RoR 服务

c++ - wxWidgets - Alpha 混合

linux - Linux 中的 TCP 套接字数据不一致

c++ - 在 C++ 中从模板类派生非模板类时的问题

c++ - 套接字上的 IP_ADD_MEMBERSHIP,套接字也会收听单播吗?

linux - Facebook 开源项目 FBCTF 安装后无法启动?

python - wxpython:从 wx.lib.sheet.CSheet 对象更新字典或其他适当的数据类型