文章可能被更新,最新地址:http://www.fearlazy.com/index.php/post/64.html
一、简介:
QListWidget是Qt提供的列表控件。它的父类是QListView,实际上QListWidget是一个自带model的view。通常情况下搭配QListWidgetItem(以下简称item)使用。
二:入门:
QListWidget的入门非常简单。只需要添加item就行了。
QListWidget* list = new QListWidget(this);
list->addItem("item 1");
list->addItem("item 2");
list->addItem("item 3");
实际上仅用两行代码就入门了。QListWidget还有其他添加item的方法(add和Insert):
//------void addItem(QListWidgetItem *item)
QListWidgetItem* item = new QListWidgetItem("item 4");
list->addItem(item);
//------void addItems(const QStringList &labels)
list->addItems(QStringList()<<"item 5"<<"item 6"<<"item 7");
//------void insertItem(int row, QListWidgetItem *item)
QListWidgetItem* item2 = new QListWidgetItem("item insert 1");
list->insertItem(3,item2);
//------void insertItem(int row, const QString &label)
list->insertItem(3,"item insert 2");
//------void insertItems(int row, const QStringList &labels)
list->insertItems(3,QStringList()<<"item insert 3"<<"item insert 4");
三、精进之路:
1.获取QListWidgetItem.
一开始的时候说了QListWidget要搭配QListWidgetItem来使用,所以在进一步玩QListWidget之前我们要学会获取item。获取item的方法有很多种:
1.根据下标来获取:
//QListWidgetItem *item(int row) const
2.根据item的位置(坐标)来获取:
//QListWidgetItem * itemAt(const QPoint &p) const
//QListWidgetItem * itemAt(int x, int y) const
3.根据下标来获取,并且从列表中移除:
//QListWidgetItem *takeItem(int row)
4.获取当前的item:
// QListWidgetItem *currentItem() const
2.美化列表.
在Qt中要说到美化,我第一时间想到的就是样式表了。不过这里不讨论样式表,看看它自己的函数怎么玩。
2.1设置item的图标使用 void setIcon(const QIcon &icon)
2.2设置item的文字颜色使用 void setForeground(const QBrush &brush)
2.3设置item的背景颜色使用 void setBackground(const QBrush &brush)
2.4设置item的文字字体使用 void setFont(const QFont &font)
2.5设置item的大小使用void setSizeHint(const QSize &size)
2.6设置itm的文本对齐方式使用void setTextAlignment(int alignment)
for(int i = 0; i < 3; ++i)
{
list->item(i)->setIcon(QIcon("f:/05_test/icon.jpg")); //设置图标
list->item(i)->setForeground(QBrush(QColor(Qt::white)));//设置前景色
list->item(i)->setBackground(QColor(70,153,181)); //设置背景色
list->item(i)->setFont(QFont("Microsoft YaHei",12,QFont::Bold));//设置字体
list->item(i)->setSizeHint(QSize(20,50)); //设置大小
list->item(i)->setTextAlignment(Qt::AlignCenter); //设置对齐方式(居中)
}
3.编辑item。
使用openPersistentEditor开启编辑一个item,与之对应的函数是closePersistentEditor,测试代码:
//添加一个按钮来触发编辑以及关闭编辑函数
static bool flag = true;
if(flag){
list->openPersistentEditor(list->item(1));
flag = false;
}else{
list->closePersistentEditor(list->item(1));
flag = true;
}
4.拖拽item。
单纯的编辑还不能满足我们的需求,我们有时需要直接拖动Item来调整他们的顺序。拖拽并非QListWidget独有的功能,它的祖先就有了这个功能。
list->setDragDropMode(QListWidget::InternalMove);
值得注意的是拖拽不仅仅可以在内部进行,还可以在多个控件中进行。
5.横着排
以上看到的列表都是垂直方向排列的,列表也能横着排。void setFlow(Flow flow),把flow的值设置为LeftToRight。搭配
void setWrapping(bool enable)使用可以让列表一直排成一行。
list->setFlow(QListWidget::LeftToRight);
6.图标模式
在某些应用场景下列表只需要展示图片,那么这时候使用图标模式就很适合了。void setViewMode(ViewMode mode),图标模式下Icon会变得很大。
list->setViewMode(QListWidget::IconMode);
若不要文本,只需要把文本设置为空即可。
作者:fearlazy。