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

Popular posts from this blog

web services - java.lang.NoClassDefFoundError: Could not initialize class net.sf.cglib.proxy.Enhancer -

Accessing MATLAB's unicode strings from C -

javascript - mongodb won't find my schema method in nested container -