Solved Insert fill circle into cell of QTableWidget
-
@mrjj
But the problem is that I don't change the value with model->setData...., as I told you, I change it with methods place in Cell class and after emit signals to notified to model and call dataChanged method... -
i dont see that matters with roles.
the delegate ask model and model get from the vector/cell so
should just be fine. -
I can not return a cell in the data method of the model because it gives me an error:
-
@juaniyoalm
you try to return a Cell pointer.
Should be like
mundo->getCell(index.row(), index.column())->somePublicVariable
or
mundo->getCell(index.row(), index.column())->Func(); // return some data, int , float , etcWhy you want to return the cell pointer ?
Just return some of its data -
I think I'm not understanding ... hah.
If I put the following:
When I modify the value in this method:
Or these:
That signals activate this method (slot):
But in no time I pass the role and then the model does not know what data to return...
-
Hi
The view itself ask for
Qt::DisplayRole and Qt::EditRole ( if u edit cell )
the new roles was for the delegate to request data it needs.You did study for more than a few minutes the
http://doc.qt.io/qt-5/model-view-programming.html
right ? -
Ok, I understand now. The problems are solved:
QVariant CellModel::data(const QModelIndex &index, int role) const { if(!index.isValid()) return QVariant(); if(index.row() >= mundo->getWorld().size() || index.row() < 0 || index.column() >= mundo->getWorld()[0].size() || index.column() < 0) return QVariant(); if(role == CircleSize) { return this->mundo->getCell(index.row(), index.column())->getFungivoresSize(); } if(role == FoodCount) { return this->mundo->getCell(index.row(), index.column())->getFood(); } return QVariant(); }
And paint method:
void CellDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { int cellValue = index.model()->data(index, Qt::UserRole+2).toInt(); qreal circleValue = index.model()->data(index, Qt::UserRole+1).toInt(); qreal circleRealValue = (circleValue*20)/50; painter->save(); painter->fillRect(option.rect, QBrush(QColor((255 - cellValue), 255, 51))); painter->setBrush(Qt::blue); painter->drawEllipse(static_cast<QPointF>(option.rect.center()), circleRealValue, circleRealValue); painter->setRenderHint(QPainter::Antialiasing, true); painter->setPen(Qt::NoPen); painter->restore(); }
-
Hi
Super.
Note you should try to reuse the CircleSize, FoodCount constexpr if possible
instead of Qt::UserRole+1.
you can just make a .h file and put them there and let both
model and delegate include it. -
-
@juaniyoalm
Well good work then. :)
Please mark as solved.
You can always make new posts
for new problems.and happy programming.