- 公开视频 -> 链接点击跳转公开课程
- 博客首页 -> 链接点击跳转博客主页
目录
QListWidget概述
QListWidget
是一个基于 QListView
的高级控件,它内置了一个标准的模(QListWidgetItem
),适合快速实现列表功能。
QListView
相比,QListWidget
更加简单易用,但在灵活性和复杂数据操作上稍显不足。
使用场景
- 简单的文本或图标列表显示。
- 快速开发无需复杂模型的数据列表。
- 不需要与其他视图共享数据模型的场景。
常见样式
- 仅文本项目:显示简单的文本列表项。
- 图标和文本项目:显示带有图标的文本列表项。
- 自定义项目 :通过
QListWidgetItem
或自定义控件实现更加复杂和个性化的列表项。
QListWidget属性设置
显示方式 (Display)
-
viewMode:设置显示模式。
QListView::ListMode
:项目以列表形式显示(垂直排列)。QListView::IconMode
:项目以图标形式显示(水平排列)。
-
gridSize:设置项目布局的网格大小(适用于
IconMode
)。 -
iconSize:设置项目图标的大小。
-
wordWrap:设置文本是否自动换行。
交互行为 (Interaction)
-
dragEnabled:启用拖动功能。
-
dragDropMode:设置拖放模式:
QAbstractItemView::NoDragDrop
:禁用拖放。QAbstractItemView::DragOnly
:仅支持拖动。QAbstractItemView::DropOnly
:仅支持放置。QAbstractItemView::DragDrop
:支持拖动和放置。
-
defaultDropAction:设置默认拖放操作(如复制、移动等)。
-
editTriggers:设置编辑触发器(如双击、选择变化等)。
-
selectionMode:设置选择模式(单选、多选等)。
-
selectionBehavior:设置选择行为(选择项目、行或列)。
高级功能 (Advanced)
- layoutMode:设置布局模式(
SinglePass
或Batched
)。 - flow:设置项目布局方向(从左到右或从上到下)。
- resizeMode:设置调整模式(固定大小或自动调整)。
- spacing:设置项目之间的间距。
- uniformItemSizes:是否统一项目大小。
- alternatingRowColors:是否启用交替行颜色。
QListWidget常见操作
内容处理
增加项目
cpp
void MainWindow::on_pushButton_addItem_clicked()
{
QListWidgetItem* item = new QListWidgetItem();
item->setText(QString().asprintf("Item %d", ui->listWidget->count()));
item->setIcon(QIcon(":/icons/icon.png"));
ui->listWidget->addItem(item);
}
删除项目
cpp
void MainWindow::on_pushButton_removeItem_clicked()
{
QListWidgetItem* item = ui->listWidget->currentItem();
delete ui->listWidget->takeItem(ui->listWidget->row(item));
}
修改项目
cpp
void MainWindow::on_pushButton_modifyItem_clicked()
{
QListWidgetItem* item = ui->listWidget->currentItem();
if (item) {
item->setText("Modified Item");
}
}
查找项目
cpp
void MainWindow::on_pushButton_findItem_clicked()
{
QList<QListWidgetItem *> items = ui->listWidget->findItems("Search Text", Qt::MatchContains);
for (QListWidgetItem* item : items) {
item->setBackground(Qt::yellow); // 高亮显示找到的项目
}
}
信号交互
项目选择变化
cpp
connect(ui->listWidget, &QListWidget::itemSelectionChanged, this, [this]() {
QListWidgetItem* item = ui->listWidget->currentItem();
if (item) {
qDebug() << "Selected item ->" << item->text();
}
});
项目双击
cpp
connect(ui->listWidget, &QListWidget::itemDoubleClicked, this, [](QListWidgetItem *item) {
qDebug() << "Item double clicked ->" << item->text();
});
项目右键点击
cpp
ui->listWidget->setContextMenuPolicy(Qt::CustomContextMenu);
connect(ui->listWidget, &QListWidget::customContextMenuRequested, this, [this](const QPoint &pos) {
QListWidgetItem* item = ui->listWidget->itemAt(pos);
if (item) {
QMenu contextMenu(this);
QAction* editAction = contextMenu.addAction("Edit");
QAction* deleteAction = contextMenu.addAction("Delete");
QAction* selectedAction = contextMenu.exec(ui->listWidget->mapToGlobal(pos));
if (selectedAction == editAction) {
item->setText("Edited via Context Menu");
} else if (selectedAction == deleteAction) {
delete ui->listWidget->takeItem(ui->listWidget->row(item));
}
}
});