作为标题,是否可以更改wxDataViewListCtrl中单个单元格的背景色?如果没有,是否可以更改整行的背景颜色?我该怎么做?其他解决方案?提前感谢的一些建议
对于那些可能感兴趣的人,我已经解决了如下
- 扩展wxDataViewCustomRenderer
li>覆盖渲染方法class MyColorRenderer: public wxDataViewCustomRenderer { public: explicit MyColorRenderer(wxDataViewCellMode mode) : wxDataViewCustomRenderer("string", mode, wxALIGN_CENTER) { } virtual bool Render( wxRect rect, wxDC *dc, int state ) override; virtual bool ActivateCell(const wxRect& WXUNUSED(cell), wxDataViewModel*WXUNUSED(model), const wxDataViewItem &WXUNUSED(item), unsigned int WXUNUSED(col), const wxMouseEvent *mouseEvent) override { return false; } virtual wxSize GetSize() const override { return wxSize(60,20); } virtual bool SetValue( const wxVariant &value ) override { m_value = value.GetString(); return true; } virtual bool GetValue( wxVariant &WXUNUSED(value) ) const override { return true; } virtual bool HasEditorCtrl() const override { return true; } virtual wxWindow* CreateEditorCtrl(wxWindow* parent, wxRect labelRect, const wxVariant& value) override { wxTextCtrl* text = new wxTextCtrl(parent, wxID_ANY, value, labelRect.GetPosition(), labelRect.GetSize(), wxTE_PROCESS_ENTER); text->SetInsertionPointEnd(); return text; } virtual bool GetValueFromEditorCtrl(wxWindow* ctrl, wxVariant& value) override { wxTextCtrl* text = wxDynamicCast(ctrl, wxTextCtrl); if ( !text ) return false; value = text->GetValue(); return true; } private: wxString m_value; };
bool MyColorRenderer::Render( wxRect rect, wxDC *dc, int state ) { dc->SetBrush( wxColour(m_value) ); rect.Deflate(2); dc->DrawRoundedRectangle( rect, 5 ); return true; }
- 根据需要创建单元格
lst->AppendColumn(new wxDataViewColumn("Colore",newMyColorRenderer(wxDATAVIEW_CELL_INERT(,5,60,wxALIGN_CENTER((;
您可以覆盖自定义模型中的wxDataViewListModel::GetAttrByRow()
,以返回任何单元格所需的颜色(和字体等(属性。