QListWidget用法

2022-09-06 11:51:25 浏览数 (1)

大家好,又见面了,我是你们的朋友全栈君。

一、参考

https://blog.csdn.net/qq_37233607/article/details/78145118

QListWidget类重要的函数: 1.void addItem(const QWidgetItem*); //加入一个项.需要自己先创建一个项的对象. 示例如下:

代码语言:javascript复制
QListWidgetItem *ite = new QListWidgetItem;
ite->setText(QString::fromLocal8Bit("杭州"));
ui.listWidget->addItem(ite);

2.void addItems(const QStringList &); //加入多个项,项是预先放在QStringList容器中的,或者使用临时容器存放,示例如下:

代码语言:javascript复制
ui.listWidget->addItems(QStringList()<<QString::fromLocal8Bit("北京")<<QString::fromLocal8Bit("上海")<<QString::fromLocal8Bit("杭州"));

3.int count(); //返回该ListWidget对象的项数.(包括隐藏的项).

4.void setViewMode(QListView::); //设置QListWidget对象的显示模式.默认是列表模式. 第一种:QListView::ListMode. //列表模式. 第二种:QListView::IconMode. //图标模式.

代码语言:javascript复制
ui.listWidget->setViewMode(QListView::IconMode);

5.int currentRow(); //返回当前选择项的行.从0开始,可以看成是当前项在QListWidget中的下标.

6.void setSortEnabled(bool); //设置是否激活排序.

7.void sortItems(Qt::SortOrder); //设置项排序的方式.默认是从AAA-ZZZ排序.(当使用此函数后,自动激活排序). 第一种:Qt::DescendingOrder: 从ZZZ到AAA排序. 第二种:Qt::AscendingOrder: 从AAA到ZZZ排序.

代码语言:javascript复制
ui.listWidget->sortItems(Qt::DescendingOrder);

8.QListWidgetItem* takeItem(int); //移除指定下标的项,并且返回指向它的指针,用于释放内存,避免内存泄漏.

代码语言:javascript复制
QListWidgetItem* ite = ui.listWidget->takeItem(ui.listWidget->currentRow());
    if (ite != 0)
        delete ite;

9.void insertItem(int, const QString&); //在指定位置插入一个项,如果在下标为2的位置插入一个项的话,那么这个项就占据下标为2的位置.

10.QListWidgetItem* item(int); //返回指定下标的项的指针.

11.int row(QListWidgetItem*); //返回指定项的下标.

12.void clear(); //清空QListWidget对象的所有内容.

QListWIdget信号 1.void itemChanged(QListWidgetItem * item); //项的内容被改变发出信号. 2.void itemClicked(QListWidgetItem * item); //项被点击发出信号. 3.void itemSelectionChanged(); //项的选择清空发生改变发出信号.

二、demo

参考 https://blog.csdn.net/jiezhj/article/details/37924727

代码语言:javascript复制
//构建QListWidget对象
    listWin = new QListWidget(this);
 
    //设置item对齐方式
    listWin->setFlow(QListWidget::LeftToRight);
 
    //设置调色板
    QPalette pal;
    //设置交替颜色
    pal.setColor(QPalette::AlternateBase,QColor(Qt::gray));
    //设置文字颜色
    pal.setColor(QPalette::Text,QColor(Qt::blue));
    //设置背景色
    pal.setColor(QPalette::Base,QColor(148,220,145));
 
    //设置颜色交替
    listWin->setAlternatingRowColors(true);
    //在listWin中加入item
    listWin->setPalette(pal);
    listWin->addItem(new QListWidgetItem(QIcon(":/new/listWidget/dialog-close.png"),"关闭按钮nsdfsnsssss"));
    listWin->addItem(new QListWidgetItem(QIcon(":/new/listWidget/dialog-cancel.png"),"取消按钮"));
    listWin->addItem(new QListWidgetItem(QIcon(":/new/listWidget/dialog-close.png"),"关闭按钮nsdfs"));
    listWin->addItem(new QListWidgetItem(QIcon(":/new/listWidget/settings.png"),"设置按钮"));
    listWin->addItem(new QListWidgetItem(QIcon(":/new/listWidget/task-ongoing.png"),"任务按钮"));
    listWin->addItem(new QListWidgetItem(QIcon(":/new/listWidget/view-refresh.png"),"刷新按钮"));
 
    //设置显示模式为图标模式
    listWin->setViewMode(QListWidget::IconMode);
    //设置可以换行显示
    listWin->setLayoutMode(QListWidget::Batched);
    //不接受拖放
    listWin->setAcceptDrops(false);
    //开启排序功能
    listWin->setSortingEnabled(true);
    //设置当前活动行为3
    listWin->setCurrentRow(2);
    listWin->setEditTriggers(QListWidget::DoubleClicked);
    //将listWin加入布局
    ui->verticalLayout->addWidget(listWin);

三、参照

https://blog.csdn.net/dk29030901065/article/details/49963235

QListWidget,QT列表控件,与QListView控件类似。

两者的本质区别是:QListWidget是基于Item,而QListView是基于Model的。

QListWidget是继承QListView,QListView是基于Model的,需要自己来建模(如建立QStringListModel,QSqlTableModel等),保存数据,这样就大大降低了数据冗余,提高了程序的效率,但是需要我们对数据建模有一定的了解,而QListWidget是一个升级版本的QListView,它已经为我们建立了一个数据存储模型QListWidgetItem,操作方便,直接调用addItem即可添加Item项(Icon,文字)。

在QListView中添加Item项需要借助QAbstractListModel,如:

代码语言:javascript复制
    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中添加Item项可以直接addItem,如:

代码语言:javascript复制
  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.addItem(Item);

  }

我们可以通过信号和槽的方式对列表控件的选项进行响应,如

代码语言:javascript复制
connect(list,SIGNAL(currentTextChanged(QString)),this,SLOT(setText(QString)));

QListWidget常用API:

setIconSize(QSize(212,145)):设置单元项大小,

setMovement(QListView::Static):设置单元项不可拖动,(Static、Free、Snap)

setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff):设置垂直滚动条显示方式(ScrollBarAsNeeded:按需显示,ScrollBarAlwaysOff:隐藏,ScrollBarAlwaysOn:常显)

QListWidgetItem常用API:

setSizeHint(QSize(209,144)):设置单元项的宽度和高度

setIcon(QIcon(imgPix.scaled(QSize(201,135),Qt::IgnoreAspectRatio,Qt::SmoothTransformation))):设置图像

其中,scaled为缩放图像方法,

(FastTransformation:低分辨率的图片,SmoothTransformation:高分辨率的图片)

四、

QListWidget QListWidget类提供了一个基于item的列表小部件。QListWidget是一个方便的类,它提供了类似于QlistView所具有的列表视图,但是具有增加和删除的功能。QListWidget使用内部模型来管理列表中的每个QListWidgetItem。想要有更灵活的列表视图,请使用具有标准模型的QListView类。

QlistWidget有两种方法追加数据,一种是一个个增加,还有一种是批量增加:

首先我们对QlistWidget做一个初始化:

代码语言:javascript复制
    this->setGeometry(100,100,200,200);

    QListWidget*list=newQListWidget(this);

list->setGeometry(50,50,100,100);

QlistWidget追加数据方法一

代码语言:javascript复制
    //方法一

    QListWidgetItem*item=newQListWidgetItem;

    item->setText("方法一");

    list->addItem(item);

这种方法最简单,适合少量添加。比如音乐播放器的列表,用户需要增加一首歌曲到列表,那用这种方法最简单。

QlistWidget追加数据方法二

代码语言:javascript复制
    //方法二

    QStringList  strList;

    strList<<QString("第二行")<<QString("第三行")<<QString("第四行");

    list->addItems(strList);

方法二相比方法一更适合批量添加,比如音乐播放器的用户有一百首歌曲要添加,你可以使用该功能批量添加。

QlistWidget还有另一种void QListWidget::insertItem(int row, QListWidgetItem *item)函数,用来在指定的地方插入数据。要注意的是它有两个参数,其中的row参数,也就是行数,是从0开始计数的这一点和索引一样,所以要特别注意。

addItems()和insertItem()的区别在于前者在末尾追加数据,后者可以在任意位置插入数据。

QlistWidget设置图标 只需要简单的设置即可,QListWidgetItem提供了setIcon()函数来实现。

代码语言:javascript复制
    //设置图标

    item->setIcon(QIcon(":/new/prefix1/img/Tux.png"));

QlistWidget设置选择方式 QlistWidget默认的选择模式是单选,在更多的时候需要设置多选模式,我们可以用如下的代码:

代码语言:javascript复制
//指定选择模式

    list->setSelectionMode(QAbstractItemView:: ExtendedSelection);

如果你只看名字,或许会选择QAbstractItemView::MultiSelection作为选择模式,但是QAbstractItemView::ExtendedSelection才是我们常见的模式,也就是以扩展的形式来多选。具体可以自己测试两种的区别。

针对选择模式,主要有以下几种:

我就不一一翻译了,英文浅显易懂。

代码语言:javascript复制
QAbstractItemView::SingleSelection

QAbstractItemView::ContiguousSelection

QAbstractItemView::ExtendedSelection

QAbstractItemView::MultiSelection

QAbstractItemView::NoSelection

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/134881.html原文链接:https://javaforall.cn

0 人点赞