wxDataViewListCtrl 和 wxVariant
wxDataViewListCtrl and wxVariant
我有一个简单的设置,一个 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();
这是我的班级:
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*/)));
我不确定到底是哪个更改导致了这个问题,但是由您的模型为正在绘制的单元格编辑的值 return 为空,因此您的渲染器不能盲目地使用它并且应该在执行之前检查 if ( !value.IsNull() )
(在这种情况下可能只是 return 或者做任何适当的事情来显示你的情况下没有值)。
我有一个简单的设置,一个 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();
这是我的班级:
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*/)));
我不确定到底是哪个更改导致了这个问题,但是由您的模型为正在绘制的单元格编辑的值 return 为空,因此您的渲染器不能盲目地使用它并且应该在执行之前检查 if ( !value.IsNull() )
(在这种情况下可能只是 return 或者做任何适当的事情来显示你的情况下没有值)。