QListView和QListWidget的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QListView和QListWidget的区别相关的知识,希望对你有一定的参考价值。

QListView是基于Model,而QListWidget是基于Item。这是它们的本质区别。
往QListView中添加条目需借助QAbstractListModel:
如:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)

ui->setupUi(this);
QStringListModel* slm = new QStringListModel(this);
QStringList* sl = new QStringList();
sl->append("asdfsadfsa");
sl->append("asdfsadfsa");
sl->append("asdfsadfsa");
slm->setStringList(*sl);
ui->listView->setModel(slm);
delete sl;



而在QListWidget中添加条目可以直接additem
如:
QListWidget list;
list.setViewMode(QListWidget::IconMode );
list.setResizeMode(QListWidget::Adjust);
list.setMovement(QListWidget::Static);
for(int i =0; i < 100 ; i ++)
QListWidgetItem *item = new QListWidgetItem(&list);
QStyle::StandardPixmap sp = (QStyle::StandardPixmap)(i % 57);

item->setData(Qt::DecorationRole, qApp->style()->standardPixmap(sp).scaled(QSize(16,16), Qt::KeepAspectRatio, Qt::SmoothTransformation) );
item->setData(Qt::DisplayRole,QObject::tr("Item %1").arg(i));

我们可以通过信号和槽的方式对列表控件的选项进行响应,例如
connect(list, SIGNAL(currentTextChanged(QString)), this, SLOT(setText(QString)));
总之,QListWidget是继承QListView,QListView是基于model的,需要自己来建模(例如建立QStringListModel、QSqlTableModel等),保存数据,这样就大大降低了数据冗余,提高了程序的效率,但是需要我们对数据建模有一定了解,初学者就先不要考虑了,
参考技术A QListView是基于Model,而QListWidget是基于Item。
往QListView中添加条目需借助QAbstractListModel:
// 如: MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) ui->setupUi(this); QStringListModel* slm = new QStringListModel(this); QStringList* sl = new QStringList(); sl->append("asdfsadfsa"); sl->append("asdfsadfsa"); sl->append("asdfsadfsa"); slm->setStringList(*sl); ui->listView->setModel(slm); delete sl;

而在QListWidget中添加条目可以直接additem
// 如:MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) ui->setupUi(this); QStringList* sl = new QStringList(); sl->append("1"); sl->append("2"); sl->append("3"); ui->listWidget->addItems(*sl); connect(ui->pushButton,SIGNAL(clicked()), this, SLOT(close()));
listWidget = QListWidget() #实例化一个(itembase)的列表listWidget.addItem('dd') #添加一个项listWidget.addItems([]) #从序列中添加子项listWidget.setDragEnabled(True)#设置拖拉listWidget.sortItems() #排序listWidget.selectAll()#全选listWidget.setSortingEnabled(bool)#设置自动排序listWidget.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)#设置选择模式选择模式有:ExtendedSelection 按住ctrl多选SingleSelection 单选 MultiSelection 点击多选 ContiguousSelection 鼠标拖拉多选listWidget.setCurrentRow(0) #设置当前选择行默认为-1listWidget.count() #得到子项总数listWidget.item(row).text() #得到第 row 行的内容 listWidget.item(row) 返回一个 item 对象listWidget.takeItem(row) #返回row 行的所在的item 对象 可以用在 insertItem()中listWidget.insertItem(2,item) #在第二行插入一项item可谓为一个listviewitem对象或者stringlistWidget.setCurrentItem('dd')#设置'dd'为当前项listWidget.selectedItems() #返回一个包含item对象 的list 对象item.setText('dsds') # 设置item的内容为dsdsitem为对象 可从 listWidget.item(row) takeItem(row) 得到

QListWidget的用法
setSelectionMode()#设置list一次最多可以选择多少item#有两种方法来listwidget中添加Item:#一种是在item构造时候,指定父widget,#如果item构造时候QListWidget已经存在,可以用下面的方法new QListWidgetItem(tr("Oak"), listWidget);#第二种方法是构造完item,在使用QListWidget::addItem()来添加item#向QListWidget中指定的位置插入item,使用QListWidget::insertItem(int , QListWidgetItem*)#使用QListWidget::count()来统计widget中总共的item数目#使用QListWidget::takeItem(int index)来删除表中的某一项#设置当前的item是第几行,QListWidget::setCurrentRow ( int row )#设置list是否可以自动排序QListWidget::setSortingEnabled(bool),默认是FALSE本回答被提问者采纳

以上是关于QListView和QListWidget的区别的主要内容,如果未能解决你的问题,请参考以下文章

QListWidget或QListView内怎么添加QCheckBox

如何隐藏 Qt QListView 或 QListWidget 中的选择矩形/虚线?

Qt C++ QListView 或 QListWidget 中的字体列表并将它们表示为复选框

PyQt5-高级控件使用(QListView)

PyQt5 组件之QListView

Qt入门系列开发教程高级控件篇QListWidget列表小部件