我正在使用Qt创建器编写c ++ GUI应用程序。我想有一个列表来向用户显示一些指南,并希望有一个滚动条列表。我可以使用哪个小部件?
答案 0 :(得分:0)
为了显示列表,树和表,Qt有一组Model/View classes。
在模型/视图中,QAbstractItemModel的子类提供数据,然后由QAbstractItemView显示。模型可以“堆叠”,以便对数据进行相当灵活的过滤,排序和映射(参见例如QSortFilterProxyModel)。
现在基本上有三种方式可以使用它们,具有不同的复杂性,功能和可扩展性:
因此,如果您想要充分的灵活性或拥有大量的列表条目(例如,成千上万),请使用QAbstractListModel实施QListView。虽然这是最强大的解决方案,但它也是最复杂的解决方案,而实施正确有效的模型存在一些缺陷。
更简单的方法是使用QStandardItemModel(或者更简单的字符串列表QStringListModel)并将其设置为QListView的模型。与必须实施自己的模型相比,这对于初学者来说可能远没那么令人生畏。它不是最具扩展性的版本,但如果您显示例如50项,这无关紧要。 您仍然可以通过代理模型将其与排序和过滤相结合。
然后,第三种也是最简单的方法是显示一个列表是使用QListWidget。它是QListView的子类,允许您通过QListWidgetItem传入列表项,类似于QStandardItemModel。它基本上将模型功能“合并”到视图类中,因此您根本不必触摸模型。虽然这是最简单的方法,但它也是最不灵活的方式:使用QListWidget时不能使用排序/过滤器代理模型。
要开始使用Model / View,特别是对于习惯于管理基于项目的列表的人,我建议(2)然后再向上移动到(1)。如果你只想要一个简单且不可变的几个项目列表,(3)也可以。如果您稍后发现需要排序/过滤功能,则稍后将(3)转换为(2)通常相当容易,而将(3)转换为(1)则是更具侵入性的更改。