Windows图形界面(GUI)-QT-C/C++ - Qt List Widget详解与应用

目录

QListWidget概述

使用场景

常见样式

QListWidget属性设置

显示方式 (Display)

交互行为 (Interaction)

高级功能 (Advanced)

QListWidget常见操作

内容处理

增加项目

删除项目

修改项目

查找项目

信号交互

项目选择变化

项目双击

项目右键点击


QListWidget概述

QListWidget 是一个基于 QListView 的高级控件,它内置了一个标准的模(QListWidgetItem),适合快速实现列表功能。

QListView 相比,QListWidget 更加简单易用,但在灵活性和复杂数据操作上稍显不足。

使用场景

  • 简单的文本或图标列表显示。
  • 快速开发无需复杂模型的数据列表。
  • 不需要与其他视图共享数据模型的场景。

常见样式

  1. 仅文本项目:显示简单的文本列表项。
  2. 图标和文本项目:显示带有图标的文本列表项。
  3. 自定义项目 :通过 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:设置布局模式(SinglePassBatched)。
  • 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));
            }
        }
    });
相关推荐
汉克老师1 小时前
GESP2026年9月认证C++三级( 第三部分编程题(2、分割字符串))精讲
c++·gesp·小学生·学c++编程
估值探索者1 小时前
【Python量化系统工程化 #08】关了 SSH 就停?systemd 让脚本开机自启 + 异常自动拉起
java·c++·人工智能·分类·数据挖掘
RAN11426760081 小时前
1.3第一个程序的介绍
开发语言·qt
天若有情6731 小时前
C++花式魔改!手写头文件复刻Java语法,彻底打破编码思维定式
java·c++·语言做语言·jac++
qq_199886872 小时前
第7板块·第3节:CUTLASS 的 GEMM 实现与优化策略
c++·人工智能·gpu算力·cuda
hetao17338372 小时前
2026-09-17 hetao1733837 的刷题记录
c++·算法
blue_ice .2 小时前
Verilog DDS 数字信号发生器:DAC 输出模拟波形与 ADC 回采观测
开发语言·单片机·嵌入式硬件·fpga开发
2601_962364972 小时前
红外活体模组,Windows 设备安全身份入口解析
windows·安全·电脑
远翔调光芯片^138287988722 小时前
ECP5702能芯科技PD取电芯片在市场上的优势有哪些?
开发语言·人工智能·单片机·嵌入式硬件·智能家居
易点云徐源3 小时前
(已解决)Photoshop 2020 点击“选择主体”闪退:不用重装,1 个配置切回旧算法解决
windows·photoshop