Qt之QListWidget实战

【Qt笔记】QListWidget控件详解 QListWidget 是 Qt 框架中一个非常实用的控件,它提供了一个基于项目的列表视图,允许用户以列表形式展示和交互数据项。 阅读详情

介绍

QListWidget是一个与QListView类似的列表视图类。
作为Qt常用的视图类,它提供了很多简便的函数,当项大于窗口高度时,会自动弹出滑动条。方便对列表中的项进行展示和操作。


1、以下是QListWidget的

添加项、删除项、清空列表、
重命名,右键菜单弹出,双击事件

等功能的实现。

重命名效果

所有代码

头文件

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QListWidget>
#include <QLineEdit>

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

public slots:
    void addListItem();
    void deleteListItem();
    void clearListItem();
    void changeListItemName();
    void finishEdit();
    void onCustomContextMenuRequested(const QPoint &pos);
    void onListWidgetItemDblClicked(QListWidgetItem *item);

private:
    int getCurrentIndexItem(QListWidgetItem * item);
    void startEdit(QListWidgetItem * item);
    bool checkItemSameName(const QString &name);

private:
    QListWidget *m_listWidget;
    QLineEdit *m_renameEdit;
    int m_cnt;
};
#endif // WIDGET_H

cpp文件

#include "widget.h"
#include <QMenu>
#include <QAction>
#include <QVBoxLayout>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    m_listWidget = new QListWidget;
    m_renameEdit = new QLineEdit(m_listWidget);
    m_renameEdit->hide();

    QVBoxLayout *vLayout = new QVBoxLayout;

    vLayout->setSpacing(0);
    vLayout->setMargin(0);
    m_listWidget->setContextMenuPolicy(Qt::CustomContextMenu);;
    vLayout->addWidget(m_listWidget);
    setLayout(vLayout);
    connect(m_listWidget, SIGNAL(itemDoubleClicked(QListWidgetItem *)),
            this, SLOT(onListWidgetItemDblClicked(QListWidgetItem *)));
    connect(m_renameEdit, SIGNAL(editingFinished()), this, SLOT(finishEdit()));
    connect(m_listWidget, SIGNAL(customContextMenuRequested(const QPoint &)),
            this, SLOT(onCustomContextMenuRequested(const QPoint &)));
    this->setMinimumSize(300,500);
}

Widget::~Widget()
{
}

void Widget::addListItem()
{
    QListWidgetItem *pItem = new QListWidgetItem;
    if (pItem) {
        m_cnt++;
        pItem->setText(QString::number(m_cnt));
         m_listWidget->addItem(pItem);
         m_listWidget->setCurrentItem(pItem);
    }
}
void Widget::deleteListItem()
{
    QListWidgetItem *curItem =  m_listWidget->currentItem();

    delete curItem;
    curItem = nullptr;
}
void Widget::clearListItem()
{
    m_cnt = 0;
    m_listWidget->clear();
     m_renameEdit->hide();
}
void Widget::changeListItemName()
{
    QListWidgetItem *curItem =  m_listWidget->currentItem();
    if (curItem)
    {
         m_renameEdit->setText(curItem->text());
    }
     m_renameEdit->show();
     m_renameEdit->selectAll();
     m_renameEdit->setFocus();
}
void Widget::finishEdit()
{
    QListWidgetItem *curItem =  m_listWidget->currentItem();
    QString oldName = curItem->text();
    if (!checkItemSameName(oldName))
    {
        curItem->setText( m_renameEdit->text());
         m_renameEdit->hide();
    }
    else if ( m_renameEdit->text() == oldName)
    {
         m_renameEdit->hide();
        return;
    }
    else
    {
        curItem->setText(oldName);
        if ( m_renameEdit->isVisible())
        {
             m_renameEdit->hide();
        }
    }
}
void Widget::onCustomContextMenuRequested(const QPoint &pos)
{
    QListWidgetItem *item =  m_listWidget->itemAt(pos);
    if (!item)
    {
        //action
        QMenu *menu = new QMenu(this);
        QAction *newAct = new QAction(tr("New"), this);
        menu->addAction(newAct);

        QAction *clearAct = new QAction(tr("Clear"), this);
        menu->addAction(clearAct);

        connect(clearAct, SIGNAL(triggered()), this, SLOT(clearListItem()));
        connect(newAct, SIGNAL(triggered()), this, SLOT(addListItem()));
        menu->exec(QCursor::pos());
        return;
    }

    startEdit(item);

    QMenu *menu = new QMenu(this);
    QAction *deleteAct = new QAction("Delete", this);
    menu->addAction(deleteAct);

    QAction *renameAct = new QAction("Rename", this);
    menu->addAction(renameAct);

    connect(deleteAct, SIGNAL(triggered()), this, SLOT(deleteListItem()));
    connect(renameAct, SIGNAL(triggered()), this, SLOT(changeListItemName()));

    menu->exec(QCursor::pos());
}

void Widget::onListWidgetItemDblClicked(QListWidgetItem *item)
{
    startEdit(item);
    changeListItemName();
}

int Widget::getCurrentIndexItem(QListWidgetItem * item)
{
    int curIndex = 0;
    for (int i = 0; i <  m_listWidget->count(); i++) {
        if (item == m_listWidget->item(i))
        {
            curIndex = i;
            break;
        }
    }
    return curIndex;
}
void Widget::startEdit(QListWidgetItem * item)
{
    if (nullptr == item) return;

    QRect rect =  m_listWidget->visualItemRect(item);
     m_renameEdit->setFixedHeight(rect.height());
     m_renameEdit->move(rect.x(), rect.y());
}
bool Widget::checkItemSameName(const QString &name)
{
    bool bIsSame = false;
    for (int i = 0; i <  m_listWidget->count(); i++)
    {
        if ( m_listWidget->item(i)->text() == name)
        {
            bIsSame = true;
            break;
        }
    }
    return bIsSame;
}

通过以上,可以扩展对应的需求,如在列表项贴图,显示视频,显示动图等。

【QT】——QListWidget的使用 QListWidget 是qt中的列表框控件,它用于显示多个列表项,列表项对应的类是QListWidgetItem. 列表项中可以同时包含图片和文字。 阅读详情

相关推荐

【Qt控件之QListWidget】介绍及使用,利用QListWidget、QToolButton、和布局控件实现抽屉式组合控件

`QListWidget`是一个方便的类,类似于`QListView`提供的列表视图,但使用经典的基于项目的接口来添加和删除项目。`QListWidget`使用内部模型来管理列表中的每个`QListWidgetItem`。 对于更灵活的列表视图小部件,请使用具有标准模型的QListView类。

FreeLikeTheWind的博客 1万+

[QT_007]Qt学习之QListWidget控件详解

QListWidget控件详解

kongcheng253的博客 1万+

Qt实战开发之QMap与QListWidget的应用

在QListWidget中显示QMap的项目,点击QListWidget项目对QMap中的项目进行添加、删除等操作。 1.QMap 实例化  (在*.h文件中进行实例化 QMap) QMap m_SwivelMap; 2.QMap 插入数据 (在*.cpp文件中操作) m_SwivelMap.clear(); m_SwivelMap.insert(tr("01、通用转

hello_MrZhang0926的博客 1061

Qt中QListWidget/QListWidgetItem详解

Qt中QListWidget/QListWidgetItem详解

aoxuestudy的专栏 9238

【QT进阶】QListWidget图标模式实战:打造动态交互式文件浏览器

本文详细介绍了如何使用QT的QListWidget图标模式打造动态交互式文件浏览器。从基础设置到高级功能实现,包括动态加载文件系统图标、悬停特效、双击打开文件等交互设计,以及性能优化和样式定制技巧。通过实战案例展示如何结合QFileSystemModel和QListWidgetItem创建高效的文件管理系统,特别适合需要视觉化文件展示的QT开发场景。

weixin_29261711的博客 630

【QT进阶】 QListWidget列表模式实战:从基础构建到动态交互菜单

本文详细介绍了QT中QListWidget列表模式的基础构建与动态交互菜单实现,涵盖从创建带图标的列表项到动态增删、右键菜单定制及性能优化等实战技巧。通过代码示例展示如何高效管理列表项,提升用户体验,特别适合开发即时通讯、文件管理器等应用场景。

weixin_27061475的博客 196

Qt 高级开发 031:QListWidget图标布局实战

本文详细介绍了Qt中QListWidget控件的图标布局实现方法,通过纯代码方式从零构建,避免了可视化UI拖拽的局限性。文章从项目初始化开始,讲解了视图模式切换、批量图标加载、条目尺寸计算、滚动条策略配置等核心内容,并重点剖析了边距嵌套和滚动条占位等常见问题。通过QSS样式定制实现界面美化,提供了完整的可编译源码示例。文章最后总结了开发过程中可能遇到的五大高频问题及解决方案,帮助开发者深入理解Qt控件底层渲染逻辑,灵活应对各类定制化需求。

软件科学-郝学胜 1009

【QT进阶】 QListWidget图标模式实战:从基础布局到动态交互全解析

本文全面解析了QT中QListWidget图标模式的应用,从基础布局设置到高级动态交互实现。详细介绍了如何创建图标视图、定制布局参数、优化性能以及实现拖拽、右键菜单等交互功能,帮助开发者高效构建视觉化界面应用。

weixin_30475039的博客 152

Qt数据库与QListWidget协同开发实战

在桌面及嵌入式GUI应用中,数据库与UI的高效协同是数据管理类系统的核心能力。其本质在于理解Model/View分离原理、掌握SQL绑定与事件驱动机制,并通过Qt原生组件(如QListWidget、QSqlQuery)构建低耦合的数据流闭环。技术价值体现在跨平台一致性、轻量级部署能力(如SQLite零配置)以及面向工业HMI的高可靠性设计。典型应用场景包括员工信息管理、设备参数配置、产线数据看板等本地化数据终端。本文聚焦Qt Widgets体系下QListWidget自定义Item与SQLite的工程化集成

r2s3t4的博客 649

Qt嵌入式开发:QListWidget列表控件实战指南

QListWidget是Qt中面向一维线性数据展示的基础视图控件,基于Model/View架构的View层封装,提供轻量级item-based接口。其核心原理在于通过内部QList容器管理QListWidgetItem实例,结合坐标映射与信号机制实现用户交互。技术价值体现在内存可控、API简洁、渲染路径短,特别适合资源受限的嵌入式HMI场景。典型应用场景包括车载中控菜单、工业设备参数页及智能家电启动器等静态或低频更新的导航型列表。本文聚焦QListWidget在Qt for MCU及轻量Qt5平台上的配置要

weixin_35749545的博客 244

QT实战:如何给QListWidget添加动态复选框(附完整代码)

本文详细介绍了在QT桌面应用开发中,如何为QListWidget动态添加复选框的完整实现方案。通过核心的setItemWidget方法,结合QListWidgetItem与QCheckBox,解决了动态控件嵌入、状态管理和内存管理等关键问题,并提供了可直接复用的完整代码示例,帮助开发者快速构建交互式列表界面。

weixin_36487018的博客 638

Qt SQLite与QListWidget动态绑定实战

SQLite 是嵌入式与桌面 Qt 应用中最常用的轻量级嵌入式数据库,而 QListWidget 则是展示结构化列表数据的经典 UI 控件。理解数据库查询结果如何安全转换为 QVariant 类型、再经类型校验映射至界面元素,是实现数据-视图实时同步的基础原理。该技术方案保障了 UI 层的数据最终一致性与线程安全性,广泛应用于设备日志查看、配置项管理、工单列表等工业 HMI 和桌面管理工具场景。本文聚焦 Qt SQLite 数据库与 QListWidget 的端到端联动实现,涵盖清空-填充原子流程、自定义

cuda7parallel的博客 706

【Qt实战】QListWidget高级应用与自定义开发指南

本文深入探讨了Qt框架中QListWidget控件的高级应用与自定义开发。通过实战案例,详细讲解了如何利用自定义Widget深度美化列表项、实现高效数据绑定与动态更新、以及处理拖拽、右键菜单等复杂交互。文章还提供了应对大型列表的性能调优策略,帮助开发者将QListWidget从基础控件升级为功能强大的界面组件。

weixin_29015051的博客 240

Qt实战:QStackedWidget结合QListWidget动态切换内容并添加滚动条

Qt 是一个功能强大的跨平台 C++ 图形用户界面开发框架,广泛应用于桌面与嵌入式系统的界面开发中。其核心优势在于良好的封装性、丰富的组件库以及高效的信号与槽机制,使得开发者能够快速构建高性能、可维护的 GUI 应用程序。本章将重点介绍 Qt 界面开发的基础知识,包括 Qt 框架的基本结构、信号与槽机制的初步理解,以及两个在多页面应用中至关重要的组件:和。通过学习它们的功能与使用方式,读者将具备构建复杂界面的基础能力。

weixin_42509888的博客 1060

QT实战:用QListWidget的图标模式,5分钟打造一个简易图片浏览器

本文详细介绍了如何利用QT的QListWidget控件,通过图标模式快速构建一个轻量级图片浏览器。从环境配置到核心代码实现,再到交互体验优化,帮助开发者在5分钟内完成高效、美观的图片浏览工具,适用于本地图片管理需求。

weixin_30565199的博客 360

Qt全能列表控件:QListWidget高级用法与实战全解析

本文深入解析了Qt中QListWidget控件的高级用法,涵盖基础架构、项操作、选择模式、样式定制等核心功能。重点介绍了自定义ItemWidget、数据存储、拖拽交互、性能优化等实用技巧,并通过文件管理器案例展示了实际应用场景。文章还提供了常见问题解决方案和最佳实践建议,帮助开发者充分发挥QListWidget的潜力,构建高效灵活的列表界面。

专注现代C++实战,从核心语法到高性能编程,助力开发者深入掌握系统级编程精髓。 528

【Qt】高效开发指南:QListWidget、QTableWidget与QTreeWidget的实战应用

本文深入探讨Qt框架中三大核心控件QListWidget、QTableWidget和QTreeWidget的实战应用。通过详细的基础用法、高级特性和性能优化技巧,帮助开发者高效构建数据展示界面,特别适合中小型数据集的展示需求。文章还分享了控件选择与配合的实用建议,提升开发效率。

info6的博客 192

【QT开发】列表控件QListWidget类详解及实战应用

QListWidget是Qt提供的一个功能强大且灵活的列表控件类,通过本篇文章的学习,你应该对QListWidget有了全面的理解,能够在自己的项目中正确使用它。QListWidget在用户界面中帮助你更好地展示和管理二维列表数据,实现交互式和响应式的数据展示,有助于创建用户友好和高效的文件列表、项目列表、数据列表等应用场景。

科技改变人类,技术成就未来 2033
上一篇: Qt实现 QOpenGL绘制彩色三角形
下一篇: Qt程序 获取windows睡眠和亮屏时的状态
Qt上位机开发
Qt上位机开发 领域专家: C/C++技术领域 领域专家: C/C++技术领域
博客等级 码龄9年 9664粉丝 178原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值