QListView 里没有自己的"模型"要自己建模来保存数据,这可以很大程度上降低数据冗余,提高程序的效率.但是要求我们对view/model框架比较了解,不适合新手使用. QListWidget是QListView的子类,在QListWidget中已经帮我们定义好了一个模型.这个模型非常方便,十分全面.这样就可以直接在QListWidget里面添加数据,而不用在从新制定一个模型了.十分方便. 其实QListView和QListWidget的主要区别就是有木有自己的模型而已.
另外:
在很多情况下,只需要把一小部分的项呈现给用户,这就没必要使用model这样重量级的组件。Qt为了方便起见也提供了一些方便的项视图类,分别是QListWidget,QTableWidget和QTreeWidget,使用这些类可以直接对item进行操作。这种实现很像Qt早期版本,组件中包含了相应的item,例如QTableWidget中包含有QTableWidgetItem等。但是对于很大的数据,我们则需要使用Qt的view类,比如QListView,QTabelView和QTreeView,同时需要提供一个model,可以是自定义model,也可以是Qt预置的model。例如,如果数据来自数据库,那么你可以使用QTabelView和QSqlTableModel这两个类。
(1)
listWidget = new QListWidget;listWidget->setIconSize(QSize(80, 60));QMapIterator<int, QString> i(symbolMap);while (i.hasNext()) {i.next();
QListWidgetItem *item = new QListWidgetItem(i.value(),listWidget);item->setIcon(iconForSymbol(i.value()));
item->setData(Qt::UserRole, i.key());//给Qt::UserRole这个角色添加值}
(2)QStringList leaders;leaders << "Stooge Viller" << "Littleface" << "B-B Eyes"
model = new QStringListModel(this);//使用的是预定义QStringListModel模型,当然也自定义(不是这里的重点)model->setStringList(leaders);listView = new QListView;listView->setModel(model);