向列表中添加数据:共有三种方式
1、void QListWidget::addItem(const QString & label):直接向列表中添加文本信息;
QListWidget *listWidget = new QListWidget(this);
listWidget->addItem("床前明月光");
listWidget->addItem("疑是地上霜");
listWidget->addItem("举头望明月");
listWidget->addItem("低头思故乡");
listWidget->setGeometry(20, 10, 100, 100);
效果:
2、void QListWidget::addItem(QListWidgetItem * item):向列表中添加 QListWidgetItem 对象;
// 创建一个列表对象
QListWidget *listWidget = new QListWidget(this);
listWidget->setGeometry(10, 10, this->width() - 20, this->height() - 20);
// 创建一个列表项对象
QListWidgetItem *item = new QListWidgetItem(listWidget);
item->setText("床前明月光"); // 设置文本信息
item->setBackgroundColor(QColor(Qt::red)); // 设置背景颜色
QBrush brush;
brush.setColor(QColor(Qt::green)); // 设置画刷的颜色
brush.setStyle(Qt::CrossPattern); // 设置画刷的样式
brush.setTextureImage(QImage(":/Image/Luffy.png")); // 设置画刷的背景图片
item->setBackground(brush); // 为列表项设置背景画刷
// 注意:setBackgroundColor 和 setBackground 都可以用来设置背景,后设置的会覆盖掉先设置的;
item->setCheckState(Qt::Checked); // 设置默认为选中状态(列表项前面会自动添加一个 checkbox)
item->setFont(QFont("宋体", 25)); // 设置字体
// 注意:setForeground 和 setTextColor 都可以用来设置前景,后设置的会覆盖掉先设置的
item->setForeground(QBrush(QColor(Qt::white), Qt::CrossPattern)); // 设置前景画刷
item->setTextColor(QColor(Qt::blue)); // 设置文本颜色
item->setTextAlignment(Qt::AlignCenter); // 设置居中对齐
item->setHidden(false); // 设置是否隐藏(如果是 true ,就会隐藏)
item->setIcon(QIcon(":/Image/OnePiece.png")); // 设置图标
item->setSelected(true); // 设置默认选中该条列表项
// 设置列表项的大小(设置宽度好像没有效果,只有高度起作用)
item->setSizeHint(QSize(20, 50));
// 将列表项添加到列表中
listWidget->addItem(item);
效果:
3、void QListWidget::addItems(const QStringList & labels):向列表中添加字符串集合
// 创建一个列表对象
QListWidget *listWidget = new QListWidget(this);
listWidget->setGeometry(10, 10, this->width() - 20, this->height() - 20);
// 创建一个字符串集合
QStringList list;
list << "床前明月光" << "疑是地上霜" << "举头望明月" << "低头思故乡" ;
// 将集合数据添加到列表中
listWidget->addItems(list);
效果:
向列表中插入数据:也有三种方式
// 创建一个列表对象
QListWidget *listWidget = new QListWidget(this);
listWidget->setGeometry(10, 10, this->width() - 20, this->height() - 20);
// 创建一个字体对象
QFont font;
font.setBold(true);
font.setFamily("宋体");
font.setPointSize(22);
// 创建一个列表项对象
QListWidgetItem *item = new QListWidgetItem(listWidget);
item->setText("静夜思");
item->setFont(font);
item->setTextAlignment(Qt::AlignCenter);
QListWidgetItem *item2 = new QListWidgetItem(listWidget);
item2->setText("李白");
item2->setFont(QFont("宋体", 18));
item2->setTextAlignment(Qt::AlignCenter);
// 向列表中插入数据
listWidget->insertItem(0, item);
listWidget->insertItem(1, item2);
listWidget->insertItems(2, QStringList() << "床前明月光," << "疑是地上霜;"
<< "举头望明月," << "低头思故乡.");
listWidget->setFont(QFont("宋体", 25)); // 设置列表字体
listWidget->item(2)->setTextAlignment(Qt::AlignCenter); // 设置文本居中
listWidget->item(3)->setTextAlignment(Qt::AlignCenter);
listWidget->item(4)->setTextAlignment(Qt::AlignCenter);
listWidget->item(5)->setTextAlignment(Qt::AlignCenter);
// listWidget->count():获取列表项的数量
for (int i = 0; i < listWidget->count(); i++)
{
// 背景色隔行改变
if (i % 2 == 0)
{
listWidget->item(i)->setBackgroundColor(QColor(241, 214, 231));
}
else if (i % 2 == 1)
{
listWidget->item(i)->setBackgroundColor(QColor(82, 247, 247));
}
}
效果:
删除当前选中的项:
// 点击列表时,删除当前选中的项
connect(listWidget, &QListWidget::clicked, [=](){
// 获取当前选中的行
qDebug() << listWidget->currentRow();
// 获取当前选中的项
QListWidgetItem *item = listWidget->currentItem();
qDebug() << item->text().toUtf8().data();
if (QMessageBox::question(this, "系统提示", "是否删除当前项?") == QMessageBox::Yes)
{
// takeItem():删除列表中的指定行,并返回该行的 QListWidgetItem 对象;否则返回 0;
// 但是该方法从列表中删除的项不会由 Qt 管理,需要手动删除。
QListWidgetItem *delItem = listWidget->takeItem(listWidget->currentRow());
listWidget->removeItemWidget(delItem);
}
qDebug() << listWidget->count();
});
双击当前选中的项,进行修改:
// 双击列表时,可以对当前选中的项进行编辑
connect(listWidget, &QListWidget::doubleClicked, [=](){
// 获取当前选中的行
qDebug() << listWidget->currentRow();
// 获取当前选中的项
QListWidgetItem *item = listWidget->currentItem();
qDebug() << item->text().toUtf8().data();
// 设置 item 允许编辑
item->setFlags(item->flags() | Qt::ItemIsEditable);
});
// 当列表项发生改变时,触发的信号(参数为当前发生更改的项)
connect(listWidget, &QListWidget::itemChanged, [=](QListWidgetItem * item){
qDebug() << "修改后的值:" << item->text().toUtf8().data();
});