[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