一、参考
https://blog.csdn.net/qq_37233607/article/details/78145118
QListWidget类重要的函数:
1.void addItem(const QWidgetItem*); //加入一个项.需要自己先创建一个项的对象.
示例如下:
QListWidgetItem *ite = new QListWidgetItem;
ite->setText(QString::fromLocal8Bit("杭州"));
ui.listWidget->addItem(ite);
2.void addItems(const QStringList &); //加入多个项,项是预先放在QStringList容器中的,或者使用临时容器存放,示例如下:
ui.listWidget->addItems(QStringList()<<QString::fromLocal8Bit("北京")<<QString::fromLocal8Bit("上海")<<QString::fromLocal8Bit("杭州"));
3.int count(); //返回该ListWidget对象的项数.(包括隐藏的项).
4.void setViewMode(QListView::); //设置QListWidget对象的显示模式.默认是列表模式.
第一种:QListView::ListMode. //列表模式.
第二种:QListView::IconMode. //图标模式.
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排序.
ui.listWidget->sortItems(Qt::DescendingOrder);
8.QListWidgetItem* takeItem(int); //移除指定下标的项,并且返回指向它的指针,用于释放内存,避免内存泄漏.
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
//构建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"),"关闭按钮\nsdfs\nsssss"));
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,如:
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,如:
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);
}
我们可以通过信号和槽的方式对列表控件的选项进行响应,如
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做一个初始化:
this->setGeometry(100,100,200,200);
QListWidget*list=newQListWidget(this);
list->setGeometry(50,50,100,100);
QlistWidget追加数据方法一
//方法一
QListWidgetItem*item=newQListWidgetItem;
item->setText("方法一");
list->addItem(item);
这种方法最简单,适合少量添加。比如音乐播放器的列表,用户需要增加一首歌曲到列表,那用这种方法最简单。
QlistWidget追加数据方法二
//方法二
QStringList strList;
strList<<QString("第二行")<<QString("第三行")<<QString("第四行");
list->addItems(strList);
方法二相比方法一更适合批量添加,比如音乐播放器的用户有一百首歌曲要添加,你可以使用该功能批量添加。
QlistWidget还有另一种void QListWidget::insertItem(int row, QListWidgetItem *item)函数,用来在指定的地方插入数据。要注意的是它有两个参数,其中的row参数,也就是行数,是从0开始计数的这一点和索引一样,所以要特别注意。
addItems()和insertItem()的区别在于前者在末尾追加数据,后者可以在任意位置插入数据。
QlistWidget设置图标
只需要简单的设置即可,QListWidgetItem提供了setIcon()函数来实现。
//设置图标
item->setIcon(QIcon(":/new/prefix1/img/Tux.png"));
QlistWidget设置选择方式
QlistWidget默认的选择模式是单选,在更多的时候需要设置多选模式,我们可以用如下的代码:
//指定选择模式
list->setSelectionMode(QAbstractItemView:: ExtendedSelection);
如果你只看名字,或许会选择QAbstractItemView::MultiSelection作为选择模式,但是QAbstractItemView::ExtendedSelection才是我们常见的模式,也就是以扩展的形式来多选。具体可以自己测试两种的区别。
针对选择模式,主要有以下几种:
我就不一一翻译了,英文浅显易懂。
QAbstractItemView::SingleSelection
QAbstractItemView::ContiguousSelection
QAbstractItemView::ExtendedSelection
QAbstractItemView::MultiSelection
QAbstractItemView::NoSelection