Alex Rivera | Logout

Why Qt is misusing model/view terminology?

Asked 2011-04-04T19:16:34.863
120

I think that the terminology used in Qt with model/view controls is flawed. On their explanation page they state, that they simplified the MVC to MV by merging View and Controller and they are giving the following picture:

picture explaining Qt MVC

However I think, they misnamed the roles of objects and I think that,

  1. What they call View with merged Controller is in fact a View only.
  2. What they call Model is in fact Controller only.
  3. If you really want to have a model it would be somewhere where their "Data" is.

I am speaking about usual and sane way you would use Qt model/view component in your app. Here are the reasons:

  1. This is typically Qt component which is used as is, without adding any Controller logic specific to your objects)
  2. This is hardly a Model, just because you should implement several Qt methods like rowCount, columnCount, data etc. which have nothing to do with your model. In fact there are typical model methods found in Controllers. Of course, you can implement both Controller and Model logic here, but first it would be quite bad code design and secondly you would merge Controller and Model not Controller and View as they state.
  3. As said in reason 2. if you want to separate Model logic that it is surely not the blue box on the picture, but rather the dashed "Data" box (communicating to real Data of course).

Is Qt wrong in their terminology, or it is just me who does not understand? (BTW: The reason why it is not academic question is that I have started to code my project following their naming and I have soon found out, that the code clearly is not right. It was only after that when I realized, that I should not try put Model logic in what they call Model)

Edit
Report

1 Answer

2

I believe their terminology is correct...although in real applications I find it can be very easy to blur the lines between model, view, and controller depending on your level of abstraction: one level's view may be a higher level's model.

I feel the confusion arises from their QAbstractModelItem class. This class isn't a model item, but rather it is an interface to a model. To make their view classes interface with the model, they had to create a generic abstract interface to the model. However, a model can be a single item, a list of items, a table of 2 or more dimensions of items, etc; so their interface has to support all these model variations. Admittedly, this makes the model items fairly complex, and the glue code to make it work with an actual model does seem to stretch the metaphor a bit.

answered 2011-05-11T04:36:32.080

Your Answer