QListView和QListWidget

    xiaoxiao2022-07-05  315

    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));   }

    QListView自定义Item

    实现方法大概有这么三种:

    1、如果使用QListWidget的话,我们直接调用 setItemWidget 即可。     void setItemWidget(QListWidgetItem *item, QWidget *widget) 2、QListWidget和QListView都可以通过调用 setIndexWidget 实现。但是该方法只适合做静态数据的显示,不适合做一些插入、更新、删除操作的数据显示。    void QAbstractItemView::setIndexWidget(const QModelIndex &index, QWidget *widget) 3、我们针对QListView实现自己的ItemDelegate。本文就是采用该种方法,重写ItemDelegate的paint函数。

    QListView实现自己的ItemDelegate方式实现自定义item,参考文章https://blog.csdn.net/a844651990/article/details/84324560

    setItemWidget实现自定义item(实现复杂的列表,包含多列),参考文章

    https://blog.csdn.net/mingzznet/article/details/17202779

    最新回复(0)