问题
I have a QListView and have assigned a model and a delegate. I am using it to display images in a horizontal bar as below
On a user event, data is updated in the model. One such event causes the width of the images to be reduced like below(#4).
I emit a dataChanged on the corresponding index and only the concerned widget is repainted. Because of this, there is a gap between #4 and #5 which does not get filled. I am thinking that there must be a way to refresh all visible rows - but am unable to find it.
I tried the following, but they do not work:
1. viewport()->updateGeometries()
2. viewport()->update()
3. I tried changing the width to see if it refreshes
int curWidth = mp_mylistview->width();
this->mp_mylistview->setFixedWidth(curWidth + 1);
this->mp_mylistview->setFixedWidth(curWidth);
Any suggestions?
Note: The above images are samples for illustration and not the originals. If you need code, I will need to filter out confidential information before posting it.
回答1:
All I had to do was to emit layoutChanged()
as a follow up to the dataChanged()
.
来源:https://stackoverflow.com/questions/14563499/how-do-i-tell-qlistview-to-resize-to-fit