[Development] QTreeView: vertical bar between columns

Konrad Rosenbaum konrad at silmor.de
Tue May 17 19:52:35 CEST 2022


On 17/05/2022 17:44, Arno Rehn wrote:
> Am 17.05.2022 um 17:36 schrieb Konrad Rosenbaum:
>> On 17/05/2022 14:58, Volker Hilsheimer wrote:
>>> As mentioned in the JIRA ticket: perhaps a treeview, which is 
>>> designed to show rows of data, not cells of data, is not the right 
>>> UI component for the job, and the problem you try to solve seems 
>>> very application specific (I’m not aware of a native tree view on 
>>> macOS or Windows that provides a strong visual border between 
>>> columns; ie macOS’s folder has a specific Column view mode for 
>>> that). Override the delegate and make each cell stand out more if 
>>> you want, or override the view’s paintEvent and render whatever you 
>>> want after the view is done. I don’t think this belongs into QTreeView. 
>> It is a really common requirement - if you have complex hierarchical 
>> models then sometimes you have no choice but to display parts of the 
>> hierarchy in a table. Unfortunately QTableView is not able to view 
>> trees and QTreeView is sub-optimal for viewing tables. What is 
>> required is a widget or mode of a widget that combines both 
>> abilities. I've had this requirement in almost all of my projects 
>> that try to visualize and interact with complex data analyses.
> Sounds like QTableView is really what you want, but your model is not 
> a table model. You can implement a proxy model that exposes a subtree 
> of your tree model (possibly also hiding any remaining children). This 
> subtree should be usable with QTableView just fine.

For my application showing a sub-tree only would probably be the worst I 
could do. Each subtree would be a tiny tiny fraction of the data I need 
to show in a really nice overview of data that absolutely needs 
additional columns. The original model is handled just fine by a tree 
view, it just is extremely difficult to read with the spacial 
compression of a normal tree view.

Tree views seem to be optimized for simple tree models like file system 
hierarchies that you would want to display in a compressed manner, 
because the data is usually very uniform and pre-sorted. If you have 
hierarchical data that requires more "breathing room" for the user to 
not get lost, then you are faced with overriding the view, style or 

> I've implemented such a SubtreeProxyModel for our own needs and it 
> works nicely (it's not primarily used for QTableView, though).

I ended up deriving from QStyledItemDelegate and adding frames to each 
cell in my QTreeView. It works good enough for that application, but in 
my opinion it is Upper Case Ugly. And it took a lot of unnecessary 
experimentation to arrive at that:

(in this particular case this table has 48 top level rows with an 
average of 4 sub-rows)

The hierarchy edited in this program is huge - this is only a very small 
fraction of it. If I was forced to further sub-divide these tree tables 
into multiple widgets than the program would go from "hard to use" to 
basically "worse than editing the XML file in vi".

The code I wrote is this:

I'm not happy to have the frames hard coded instead of styled, but I 
would be even less happy spending even more time on this.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/development/attachments/20220517/5081f2b2/attachment-0001.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 40vT4NVfeFeLoJ0i.png
Type: image/png
Size: 44530 bytes
Desc: not available
URL: <http://lists.qt-project.org/pipermail/development/attachments/20220517/5081f2b2/attachment-0001.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature
Type: application/pgp-signature
Size: 495 bytes
Desc: OpenPGP digital signature
URL: <http://lists.qt-project.org/pipermail/development/attachments/20220517/5081f2b2/attachment-0001.sig>

More information about the Development mailing list