It really depends what the semantics of your actions are. In general you can implement what you want either in the model, in the view or in the delegate so in any of the three components that make the ItemViews architecture. Implementing this behaviour in the model makes sense if assuming that you have more than one view on the same model, you want the same items highlighted in both views. Then you need to emit dataChanged in the model for the indexes that are to be updated and return the changed value from data(). Another solution is to keep a list of highlighted items in the view or delegate and reimplement proper methods in those components. Sorry for not "telling the whole story" but I'd have to quote half of the documentation so instead of that you can just read it yourself