QTableView

时间:2016-11-01 17:02:07

标签: qt tableviewcell

我们想要一个允许其单元格中的复杂内容的TableView。 TableView应该是通用的,我可以做简单的事情,如图1中所示。The left image is a simple example, where I fill a simple TableModel, set it for the TableView and display it.

enter image description here

但是,如果我想在一个单元格中添加更复杂的内容呢?请再看一下第一张照片。对于我们想要显示图像,描述和更多描述的每个单元格,正确的部分更复杂,因此在一个单元格中有三个项目。

据我所知,我可以将小部件放到TableView的单元格中。 但是,如果我想在后台拥有一个合适的TableModel,我将如何存储数据?

最重要的是,当我使TableView的小部件变得更小,内容应该适应时,视图应该自动调整大小

when i make the widget of the TableView smaller the content should adapt

因此,如果我使用TableView并想要调整大小,我将不得不将内容从一个colum铲到另一个colum。 根据我的理解,列也定义了布局。

如果我为此目的使用QGridLayout,我会更好吗? 我是否必须为QGridLayout定义一个全新的模型?

感谢您的帮助! 我是QT的新手,非常感谢你的投入!

1 个答案:

答案 0 :(得分:0)

Qt提出的在表格视图的每个单元格中具有复杂视图的解决方案是使用自定义delegate。看看Star Delegate example,它正好展示了这种技术。

基本上有两个选项可以继续自定义委托:要么subclass QStyledItemDelegate(或者它的基类QItemDelegate,如果你需要特别地绘制Qt数据类型的项目)或子类{{3完全控制委托的外观和行为。

但是,您对窗口小部件大小调整的自动布局重新排列的第二个要求表明您的视图实际上不必遵循基础表的架构。 Qt有一个QAbstractItemDelegate示例,它实现了一个具有这种重新调整大小的属性的布局,我想最简单的方法就是使用这个布局以及代表表模型单元格的自定义小部件。为了实现这一点,您可以实现一个自定义视图类,用于监听模型的信号并创建/删除小部件并根据需要更新流布局。 flow layout,尽管现在有点过时,因为它涵盖了Qt4,但它包含了一个关于实现自定义视图的章节(#6),该视图不是QAbstractItemView的子类,而只是一个小部件,它将自身更新为底层模型更新。对我来说,感觉是解决问题的正确方法。