在Ubuntu上使用wxWidgets2.9.3获取错误

时间:2012-01-31 08:48:12

标签: c++ ubuntu wxwidgets assert

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

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

  1. error: ‘class wxBitmap’ has no member named ‘UseAlpha’
  2. error: ‘class wxPanel’ has no member named ‘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并且调用堆栈是

  5.   

    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(_cao *)()(/ 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面包板::重置(此= 0x81713c0)(/ home /vinayak / code / IConBread / giftboard.cpp:79)
      9 0x8054e57面包板::面包板(此= 0x81713c0)(/ home/vinayak/codes/IConBread/breadboard.cpp:17)
      10 0x805d7c5接口::接口(此= 0x8171200,父= 0x81703e0,宽度= 900,高度= 570)(/ home /vinayak / code / IConBread / interface.cpp:24)
      11 0x8069db4 MainFrame :: MainFrame(this = 0x8108af8,frame = 0x0,title = ...)(/ home /vinayak / code / IConBread / mainframe.cpp:127)
      12 0x80525a8 Application :: OnInit(this = 0x80ab228)(/ home /vinayak / code / 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-1.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)上,这是一个完美的代码 谢谢!

1 个答案:

答案 0 :(得分:1)

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

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