Problems with Open-Source Downloads read https://www.qt.io/blog/problem-with-open-source-downloads and https://forum.qt.io/post/638946
Insert fill circle into cell of QTableWidget
-
-
@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.
-
Ok I have already done it.
I want to thank all of you who have tried to help me, especially @mrjj and @SGaist . You have had a lot of patience with me. Thank you.
Surely I will have more questions about the project later. I'll stay here.
-
@juaniyoalm
Well good work then. :)
Please mark as solved.
You can always make new posts
for new problems.and happy programming.