qt - QListView and delegate display unintended item -
qt - QListView and delegate display unintended item -
i've problem qlistview, paint unintended item on top left of qlistview :
http://s4.postimage.org/64orbk5kd/screen_shot_2013_02_14_at_20_23_14.png
i utilize qstyleditemdelegate in qlistview :
m_stringlist.push_back("first"); m_stringlist.push_back("second"); m_stringlist.push_back("third"); m_model.setstringlist(m_stringlist); ui->processeslistview->setflow(qlistview::lefttoright); ui->processeslistview->setmodel(&m_model); ui->processeslistview->setitemdelegate(new processitemdelegate(this, ui->processeslistview));
the delegate (processitemdelegate) paint method utilize custom qwidget display info :
void processitemdelegate::paint ( qpainter * painter, const qstyleoptionviewitem & option, const qmodelindex &inindex ) const { _listitem->setcontent(_listview->model()->data(inindex).tostring()); painter->save(); painter->translate(option.rect.center()); _listitem->render(painter); painter->restore(); }
the setcontent method of qwidget simple :
void processitem::setcontent(const qstring &s) { ui->processid->settext(s); }
i have way add together widget list using qlistwidget
.
for illustration knowing ui->historyview
qlistwidget
element , historyelementview
subclass of qwidget
.
void view::onhistorychanged(const qlist<historyelement> &history) { clearhistory(); foreach(historyelement elt, history) { historyelementview *historyviewelement = new historyelementview(elt.getdatetime("dd/mm/yyyy - hh:mm"), elt.getfilename()); qlistwidgetitem *item = new qlistwidgetitem(); ui->historyview->additem(item); ui->historyview->setitemwidget(item, historyviewelement); } } void view::clearhistory() { qlistwidgetitem *item; while (ui->historyview->count() != 0) { item = ui->historyview->takeitem(0); delete item; } }
you not need delete widgets within qlistwidgetitem
, handle qt.
once widgets within list, can retrieve them using :
// using index qlistwidgetitem *item = ui->historyview->item(0); historyelementview *elt = qobject_cast<historyelementview *>(ui->historyview->itemwidget(item)); // using position qlistwidgetitem *item = ui->historyview->itemat(pos); historyelementview *historyelement = qobject_cast<historyelementview *>(ui->historyview->itemwidget(item));
hope helps.
qt listview
Comments
Post a Comment