我有一个简单的设置,一个wxDataViewListCtrl,第一列使用wxDataViewCustomRenderer,第二列只是文本。
class MyCustomRenderer : public wxDataViewCustomRenderer
我向wxDataViewListCtrl添加一行,如下所示:
wxVector<wxVariant> item;
item.push_back(wxVariant(/*a raw pointer of MyClass goes here*/));
item.push_back(wxVariant("some string goes here"));
m_data_view_list_ctrl->AppendItem(item);
item.clear();
这是MyClass:
class MyClass final : public wxObject
这是我的SetValue方法的样子:
bool MyCustomRenderer::SetValue(const wxVariant& value)
{
MyClass* temp = static_cast<MyClass*>(value.GetWxObjectPtr());
/*Do stuff with temp here...*/
return true;
}
它起作用了,但现在没有了。失败并显示以下错误: https://www.dropbox.com/s/acxbzthp3ltadny/wxwidgets.png?dl=0
我唯一改变的是我将wxWidgets的静态库从3.0.4更新到了3.1.2。 为什么停止工作?我在这里想念什么? 请帮助我:-)
谢谢大家的回答。 here问题已解决。简而言之,我需要像这样更改此行:
MyCustomRenderer::MyCustomRenderer() : wxDataViewCustomRenderer("void*", wxDATAVIEW_CELL_INERT, wxALIGN_CENTER)
这个像这样:
item.push_back(wxVariant(static_cast<void*>(/*Raw pointer to an instance of MyClass*/)));
答案 0 :(得分:1)
我不确定到底是哪个更改导致了此问题,但是您的模型为要绘制的单元格返回的值为null,因此渲染器不能只是盲目使用它,而应检查{{1} },然后再执行此操作(在这种情况下,可能只是返回结果,或者执行任何适当的方法来显示您的情况下没有值)。