[Qt-interest] setViewportMargins on QTableView

Andre Somers andre at familiesomers.nl
Wed Feb 3 11:20:11 CET 2010


Davor J. wrote:
> I am currently trying to set the viewportMargins on QTableView. Apparently, 
> QTableView calls setViewportMargins() internally, so I have to adjust it 
> constantly in the resizeEvent() to take effect. In my search for how to 
> implement it correctly, I read this line from the 
> QAbstractScrollArea::setViewportMargins reference:
>
> "Note that this function is frequently called by QTreeView and QTableView, 
> so margins must be implemented by QAbstractScrollArea subclasses. Also, if 
> the subclasses are to be used in item views, they should not call this 
> function."
>
> I do not see how this can be done. How does one subclass QAbstractScrollArea 
> so it can be used by the QTableView. The member function is not virtual, so 
> QTreeView will always call QAbstractScrollArea::setViewportMargins() 
> internally, no matter how I implement it?
>   
The way I read that statement, is that you are right in your assessment 
that it can not be done. What I'd probably do, if I really needed the 
feature you need, is one of these things:
1) modify the Qt source code, and distribute your modified libs with 
your application. That yields two sub-options:
1a) do that in such a way, that it is binairy compatible, and submit the 
patch to the Trolls and pray that it is accepted,
1b) accept that you have just entered a maintance nightmare, and that 
you'll need to re-apply the patch against every future version of Qt.
2) copy the relevant code of Qt over to your own project, and modify it 
as part of your own project. Depending on your licence and the place 
where you leave that code (separate lib or really inside the application 
itself), that may or may not limit the licence options of your own code. 
A significant downside is that you basically end up in option 1b above 
again, though this time you only need to keep an eye on that part of the 
Qt code to see if there are relevant patches for you.

I'm not sure what class exactly calls the setViewportMargins method. If 
it is QTableView, you may just have to copy that code and adapt it. If 
it is deeper in the hierarchy, perhaps you'd end up with too much of the 
Qt code in your own project to get rid of it to your liking. I know, 
both options suck, but I can't think of another.

André






More information about the Qt-interest-old mailing list