wxDataViewListCtrl和wxVariant

时间:2019-02-05 19:58:36

标签: wxwidgets

我有一个简单的设置,一个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*/)));

1 个答案:

答案 0 :(得分:1)

我不确定到底是哪个更改导致了此问题,但是您的模型为要绘制的单元格返回的值为null,因此渲染器不能只是盲目使用它,而应检查{{1} },然后再执行此操作(在这种情况下,可能只是返回结果,或者执行任何适当的方法来显示您的情况下没有值)。