wxWidgets中DataView容器项仅显示一列的问题求助
wxWidgets DataView容器项仅显示一列问题
我创建了一个包含3列的DataView组件,添加了两个项:
- 无子女的非容器项:正常显示全部3列
- 有子女的容器项:仅显示一列
(无子女项展示效果:3列内容完整显示;有子女项展示效果:仅第一列可见,其余列未渲染)
解决方法
- 为容器项的每一列提供数据
容器项不会自动填充多列数据,需确保数据模型为容器项的所有列返回对应值。以wxDataViewModel为例,在GetValue方法中处理所有列:
virtual void GetValue(wxVariant& variant, const wxDataViewItem& item, unsigned int col) const override { MyData* data = static_cast<MyData*>(item.GetID()); if (!data) return; switch(col) { case 0: variant = data->name; break; case 1: variant = data->val1; break; case 2: variant = data->val2; break; default: break; } }
- 设置合理的列宽
检查列宽设置,避免容器项的展开箭头挤压其他列。手动指定列宽:
dataViewCtrl->SetColumnWidth(0, 160); dataViewCtrl->SetColumnWidth(1, 120); dataViewCtrl->SetColumnWidth(2, 120);
- 确保容器项所有列都标记为有数据
在数据模型的HasValue方法中,为容器项的所有列返回true,避免控件隐藏无数据标记的列:
virtual bool HasValue(const wxDataViewItem& item, unsigned int col) const override { return true; }
内容的提问来源于stack exchange,提问作者oqamm
相关产品推荐
相关产品推荐

