2
votes

I've been toying around with Qt and ran into a small issue.

I want to display a list of pictures as a table of icons. Right now, I'm doing this by subclassing QAbstractTableModel, and plugging it into a subclass of QTableView.

This, in my opinion, overly complicates the code, the model and the view (especially when trying to edit/append items). When trying to implement the model as a QAbstractListModel, the items are displayed as table rows.

Is there a way to make QTableView display items as columns, instead?
Edit: Such that the items are rendered in a single row from left to right, and wrapped to a new row.

Or is it preferable to use the table model for table views in any case and work around the issues?

It's worth mentioning I'm using C# bindings for Qt based on Qt Jambi.

2

2 Answers

3
votes

The QListView has exactly the functionality you are talking about.

If you don't need any functionality specific to QTableView, then I would suggest switching.

If you set "isWrapping", then the list will start from the top, go down to the bottom, then wrap to a new column.

Set "flow" to LeftToRight to display the list in rows instead of columns

You might also need to set "resizeMode", instead of Fixed, to Adjust. Which will automatically move things around when the list is resized.

Hope that helps.

Just as a side note, here is FlowLayout example. So if you just want to display a set of images in a self-adjusting grid, this would do it for you without all the overhead of a list/table. However, it doesn't give you any selection/editing capabilities or anything just layout.

0
votes

I don't understand something here. You implement TableModel, so you can prepare data for view in the most desirable way. Suppose you have data A,B,C,D, then you can return A(00),B(01),C(10),D(11), or for example A(00),C(01),B(10),D(11). Is it what you want to do?