我有一堆存储在std :: vector中的对象。这些对象中的每一个都有一个name属性,我想在QListView中显示这些名称。
我已经阅读了有关ModelView架构的内容,听起来这样可以满足我的需求。我还读到有些人会创建一个带有名称的qstrings的新列表,并用它填充列表视图。但是,我想避免这样做,因为它引入了数据重复。
在QListView中显示源自std :: vector甚至是数组的项目的最佳实践是什么?
答案 0 :(得分:0)
QListView需要一个模型。 在您的情况下,如果您的std :: vector是std :: vector,QStringListModel可以满足您的需求,但如果您使用更复杂的数据,则需要编写自己的模型(例如,通过继承QAbstractListModel,请参阅http://doc.qt.io/qt-5/qabstractlistmodel.html#subclassing )。 你的子类需要把你的std :: vector作为输入并存储它或将它转换成任何更合适的形式。
另一个选择是使用QListWidget而不是QListView并且(几乎)忘记模型。第一次尝试似乎更容易,但只要您想要更多功能(复杂数据,管理数据持久性等),它就不够了。