Qt学习:项视图类之QListWidget

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

        类QListWidget在其内部定义了一个具有列表结构的模型,并以列表形式显示其中的数据项。列表中的每个数据项被表示为类QListWidgetItem的一个对象。在列表视图中所要显示的数据被存放在每个数据项的角色DisplayRole对应的数据子项中。这个数据子项的类型为QVariant,其中可以存放类型为QString的字符串,也可以存放类型为int或者double的数值。我们可以调用QListWidget的成员函数addItem()

向列表添加一个数据项.

        在ListWidget控件的properties选项中,一般常对以下选项进行设置。

              name:            该控件对应源代码中的名称;

              font:            设置表格内部的字体;

              count:           保存项目的数目;

              currentRow:      保存当前项目的行;

              sortingEnabled:  是否对item排序。

        以下是一些常用的成员函数:

1) QListWidget::QListWidget ( QWidget *parent = 0 )       // 构造一个父对象为parent的ListWidget。

2) void QListWidget::addItem ( const QString & label )     // 添加一个新的项目,在新添加的项目中添加label标签。

3) void QListWidget::addItem ( QListWidgetItem *item )   // 添加项目item。

4) void QListWidget::addItems ( const QStringList & labels )   // 添加一列项目。

5) void QListWidget::clear () [slot]   // 清除该ListWidget中的所有项目。

6) QListWidgetItem *QListWidget::currentItem () const    //返回当前活动项目。

7) void QListWidget::editItem ( QListWidgetItem *item )    //如果项目item是可编辑的,开始编辑项目item。

8) QList<QListWidgetItem *> QListWidget::findItems( constQString & text, QT::MatchFlags flags ) const  //查找匹配字符串text的项目,并返回查找结果。

9) void QListWidget::insertItem ( int row, QListWidgetItem *item )    //在行row处插入项目item。

10) void QListWidget::insertItem ( int row, const QString &label )        //这是一个重载函数,函数功能同9),在行row处插入标签为label的新项目。

11) voidQListWidget::insertItems ( int row, const QStringList & labels )    //在行row处插入一列项目。

12) QListWidgetItem *QListWidget::item ( int row ) const    //返回行row处的项目,如果行row处没有项目则返回0。

13) QListWidgetItem*QListWidget::itemAt ( const QPoint & p ) const    //返回点p处的项目。

14) QListWidgetItem *QListWidget::itemAt ( int x, int y ) const    //返回坐标(x,y)处的项目。

15) QWidget *QListWidget::itemWidget ( QListWidgetItem *item ) const    //返回项目item处显示的控件。

16) QListWidgetItem *QListWidget::takeItem ( int row )   // 移除行row处的项目,并返回项目控件。

17) void QListWidget::removeItemWidget ( QListWidgetItem *item )    //删除项目item处的控件。

18) int QListWidget::row ( const QListWidgetItem *item ) const    //返回项目item所在的行。

19) QList<QListWidgetItem *> QListWidget::selectedItems ()const    //返回所有被选中的项目的控件。

20) void QListWidget::setCurrentItem ( QListWidgetItem *item )    //设置项目item为当前项目。

21) void QListWidget::setItemWidget ( QListWidgetItem *item, QWidget*widget )    //设置控件widget为项目item的显示控件。

22) void QListWidget::setItemWidget ( QListWidgetItem *item, QWidget*widget )    //这是个重载函数,函数功能同23)。

23) voidQListWidget::sortItems ( QT::SortOrder order = QT::AscendingOrder )    //把项目按照order进行排序。

下面给出一个例子,效果如下图:

 

        代码如下:

 

//flowchartsymbolpicker.h
#ifndef FLOWCHARTSYMBOLPICKER_H
#define FLOWCHARTSYMBOLPICKER_H

#include <QDialog>
#include <QMap>
#include <QIcon>

class QDialogButtonBox;
class QListWidget;

class FlowChartSymbolPicker : public QDialog
{
    Q_OBJECT
    
public:
    FlowChartSymbolPicker(const QMap<int, QString> &symbolMap,
                          QWidget *parent = 0);

    int selectedId() const { return id; }
    void done(int result);
    ~FlowChartSymbolPicker();

private slots:
    void message();

private:
    QIcon iconForSymbol(const QString &symbolName);

    QListWidget *listWidget;
    QDialogButtonBox *buttonBox;
    int id;
};

#endif // FLOWCHARTSYMBOLPICKER_H

//flowchartsymbolpicker.cpp
#include <QListWidget>
#include <QListWidgetItem>
#include <QDialogButtonBox>
#include <QVBoxLayout>
#include <QMessageBox>

#include "flowchartsymbolpicker.h"

FlowChartSymbolPicker::FlowChartSymbolPicker(const QMap<int, QString> &symbolMap,
                                             QWidget *parent)
    : QDialog(parent)
{
    id = -1;

    listWidget = new QListWidget;
    listWidget->setIconSize(QSize(60,60));
    listWidget->setEditTriggers(QAbstractItemView::AnyKeyPressed);

    QMapIterator<int, QString> i(symbolMap);
    while (i.hasNext()) {
        i.next();
        QListWidgetItem *item = new QListWidgetItem(i.value(), listWidget);
        item->setIcon(iconForSymbol(i.value()));
        item->setData(Qt::UserRole, i.key());
    }

    buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok |
                                     QDialogButtonBox::Cancel);
    connect(buttonBox, SIGNAL(accepted()), this, SLOT(message()));
    connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject()));

    QVBoxLayout *layout = new QVBoxLayout;
    layout->addWidget(listWidget);
    layout->addWidget(buttonBox);
    setLayout(layout);

    setWindowTitle(tr("Flowchart Symbol Picker"));
}

void FlowChartSymbolPicker::message()
{
    QMessageBox::about(this, tr("AHA"),tr("Thanks"));
}

void FlowChartSymbolPicker::done(int result)
{
    id = -1;
    if (result == QDialog::Accepted) {
        QListWidgetItem *item = listWidget->currentItem();
        if (item)
            id = item->data(Qt::UserRole).toInt();
    }
    QDialog::done(result);
}

QIcon FlowChartSymbolPicker::iconForSymbol(const QString &symbolName)
{
    QString fileName = ":/images/" + symbolName.toLower();
    fileName.replace(' ', '_');
    return QIcon(fileName);
}

FlowChartSymbolPicker::~FlowChartSymbolPicker()
{   
}

//main.cpp 
#include "flowchartsymbolpicker.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QMap<int, QString> map;
    map.insert(77, QObject::tr("7"));
    map.insert(78, QObject::tr("11"));
    map.insert(79, QObject::tr("12"));
    map.insert(80, QObject::tr("13"));
    map.insert(81, QObject::tr("14"));
    map.insert(82, QObject::tr("15"));
    map.insert(83, QObject::tr("16"));
    map.insert(84, QObject::tr("ali5"));
    map.insert(85, QObject::tr("l5"));
    map.insert(86, QObject::tr("oh5"));

    FlowChartSymbolPicker window(map);
    window.resize(300, 300);
    window.show();
    
    return a.exec();
}

 

        构造函数接收一个QMap关联容器对象,这个容器存储了每个项的ID和名字,在构造函数中我们遍历这个容器的每个元素,并用该元素的键和值设置QListWidgetItem对象的名字和ID。QListWidget有几个角色(role),每个角色都有一个关联的QVariant,最常用的角色有:Qt::DisplayRole, Qt::EditRole, Qt::IconRole, Qt::UserRole,并且这些角色都有方便的设置和获取函数[setText(), setIcon()]等。通过指定一个大于等于Qt::UsetRole的值就可以定义自定义的角色。在本例中,使用Qt::UserRole存储每一个项的ID。

        Done()函数式由QDialog重新实现的。当用户单击OK或者Cancel按钮时,就会调用它。如果用户单击OK,就获得相应的项,并且使用data()函数提取ID。如果对项的文本感兴趣,则可以通过调用item->data(Qt::DiaplayRole).toString()或者更为方便的item->text()来获取文本。

        默认情况下,QListWidget是只读的。如果想让用户编辑这些项,则可以使用QAbstractItemView:: setEditTriggers()设置这个视图的编辑触发器。例如:QAbstractItemView::AnyKeyPressed这个设置值的意思是:用户只要一开始输入就进入项的编辑状态。类似的,也可以提供一个Edit(编辑)按钮(还可以提供Add按钮和Delete按钮),同时使用信号槽连接,这样就可以使用程序来控制编辑操作了。

        我们还可以设置viewModel这个参数,来确定使用不同的视图进行显示。比如,我们使用下面的语句: 
 
        listWidget->setViewMode(QListView::IconMode);
        程序的效果如图:

 

 

 


 

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

相关推荐

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

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

FreeLikeTheWind的博客 1万+

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

QListWidget控件详解

kongcheng253的博客 1万+

【嵌入式——QT】QListWidget

嵌入式-QT-QListWidget

weixin_39723539的博客 3406

Qt中QListWidget/QListWidgetItem详解

Qt中QListWidget/QListWidgetItem详解

aoxuestudy的专栏 9238

QT中QListWidget

Qt 中用于项(Item)处理的组件有两类,一类是 Item Views,包括 QListView、QTreeView、 QTableView、QColumnView 等;另一类是 Item Widgets,包括 QListWidget、QTreeWidget 和 QTable Widget。 Item Views 基于模型/视图(Model/View)结构,视图(View)与模型数据(Mode...

conimade的博客 3398

「QT」QSS样式表 之 QListWidget树形窗口类

通过QSS样式表,我们可以轻松地自定义及其列表项的外观,包括背景颜色、边框、字体、项目间距等。这不仅可以提升用户界面的美观性,还可以增强用户体验。本文详细介绍了如何为编写QSS样式表,并提供了示例代码以供参考。希望本文能够帮助你更好地理解和应用QSS样式表来定制控件。何曾参静谧的博客。

何曾参静谧的博客 1406

Qt学习:项视图类之QSortFilterProxyModel和QListWidget

QSortFilterProxyModel是一个方便我们对模型操作(排序)的类,它是这样工作的:QSortFilterProxyModel封装一个已经存在的模型,我们可以把这个模型叫做源模型,即源模型为QSortFilterProxyModel提供数据,QSortFilterProxyModel利用视图类来观察源模型的数据并提供对源模型的数据的操作。其实就如这个类的名字说的那样,它只是一个“代理”

bcs_01的专栏 2984

Qt学习笔记-----QListWidget,QTableWidget和QTreeWidget

在MV架构中,Qt提供了三个可以直接使用的视图类用于呈现模板中的数据,分别是QListView,QTableView和QTreeView。不过还没完,紧接着Qt又提供了基于这三个类设计的更方便的类,分别是QListWidget,QTableWidget,QTreeWidget。 这三个类分别继承于上述三个视图类,实现了基本的函数,可以实现添加和删除等基本的功能,同时它们使用内部的model来管理

一个程序渣渣的小后院 5543

【Qt开发】多元素类控件(一)-> QListWidget

Qt框架中的QListWidget是一个强大的列表控件,支持文本、图标等丰富内容展示。它提供多种视图模式(列表/图标)、选择方式(单选/多选)、编辑和拖放功能,简化了列表数据的增删改查操作。通过信号槽机制响应用户交互,如选中项变化、双击等事件。QListWidgetItem类支持设置字体、图标、对齐等属性。示例代码展示了如何实现列表项的添加、删除和选中事件处理。该控件适用于中小型数据列表场景,能快速构建直观的用户界面。

枫叶丹4的博客 1400

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

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

科技改变人类,技术成就未来 2033

【QT】QListWidget控件的使用

本文介绍QListWidget 控件的使用,包含QListWidget类常用的属性和方法,QListWidget列表框的信号和槽,QListWidget 类常用操作示例(初始化列表、插入项、删除当前项和清空列表、遍历并选择项、QListWidgetItem常用信号等操作),QListWidget 类简单应用等内容。

u011671745的博客 1797

【Qt之模型视图】5. Qt库提供的视图便捷类

Qt提供了一些便捷的视图类,如QListWidget提供项目列表,QTreeWidget显示多级树结构,QTableWidget提供单元格项的表格。每个类都继承了QAbstractItemView类的行为,QAbstractItemView类实现了项目选择和标题管理的通用行为。这三个类使用起来方便,但适合于少量数据的存储与显示(存储个几万、十几万的数据还可以),因为它们三个没有将视图和模型进行分离,因此没有视图类灵活。而且这三个类也不能和模型一起使用。

FreeLikeTheWind的博客 2787

Windows系统监控实战:Grafana+Prometheus+node_exporter配置全攻略

本文提供了一套完整的Windows系统监控解决方案,详细介绍了如何使用Grafana、Prometheus和node_exporter(Windows版为windows_exporter)构建可视化监控平台。从环境准备、组件安装配置,到数据可视化与常见问题排查,手把手指导您实现从数据采集到仪表盘展示的全过程,帮助您从被动救火转向主动预警,有效保障Windows服务器稳定运行。

assembly8low的博客 248

Qt学习 之 UI视图类(一) QListWidget

类QListWidget在其内部定义了一个具有列表结构的模型,并以列表形式显示其中的数据项。列表中的每个数据项被表示为类QListWidgetItem的一个对象。在列表视图中所要显示的数据被存放在每个数据项的角色DisplayRole对应的数据子项中。这个数据子项的类型为QVariant,其中可以存放类型为QString的字符串,也可以存放类型为int或者double的数值。我们可以调用QList

Mr.Phoebe的专栏 3271

Calibre 3Dstack --每日一个命令day27【overlap】(3-27)

本文介绍了Calibre3Dstack中overlap命令的使用方法。该命令用于检查两个已放置层之间的重叠量是否符合要求,支持设置检查名称、层类型、堆叠范围、检查方向等参数。关键参数包括:-constraint指定重叠约束条件,-exact控制百分比精度,-by_area切换为面积检查模式,-intersection报告相交区域。检查结果可通过RVE选项定制显示方式,适用于3D堆叠设计中的层间重叠验证场景。

u013620135的博客 112

如何使用事务码SMICM分析ABAP代码发起的HTTP请求的错误

当我用CL_HTTP_CLIENT往一个外网的url发请求时,遇到错误:ICM_HTTP_SSL_PEER_CERT_UNTRUSTED 错误是从这段ABAP代码里抛出来的: CALL METHOD lo_http_client-&gt;get_last_error IMPORTING code = lv_sysubrc message = ev_error_message. "BREAK-...

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 3209

Qt QListWidget 总结

Qt QListWidget 总结

enyp80的博客 1145

基于STM32设计的智能水产养殖系统(华为云IOT)(152)

当前设计的智能水产养殖系统主控芯片采用STM32F103RCT6,可以实现对水位、水温、水混浊度和PH值等参数的监测和控制,并且支持定时投喂功能。通过连接华为云物联网平台,将传感器数据上传到服务器,并通过Qt设计的Android手机APP来获取设备上传的数据,从而实现对养殖环境的远程监测和控制。

8828

Qt模型视图框架:QListWidget

一、描述 QListWidget 是一个方便的类,它提供类似于 QListView 提供的列表视图,但具有用于添加和删除项目功能的界面。 QListWidget 使用内部模型来管理列表中的每个 QListWidgetItem。 有两种方法可以将项目添加到列表中: 可以使用列表小部件作为其父小部件来构建。 QListWidget *listWidget = new QListWidget(this); new QListWidgetItem(tr("Oak"), listWidge

友善啊,朋友的博客 1953

SAP 批次管理(分割评估)

批次分割评估: 业务场景:企业要求各批次物料成本价格不一样。此时可以采用分割批次来实现不同成本 后台配置: (1)、激活分割评估 后台---物料管理----评估与科目设置---分割评估-----激活分割评估 (2)、配置分割评估 后台---物料管理----评估与科目设置---分割评估-----配置分割评估 进入全局性分类后,批次分割采用已有的评估类型“X自动(批)”: ...

willieyuan的博客 1万+

OpenClaw 安装失败:npm install 多次报错的完整排错与解决方案

这次问题的最终解决,其实并不复杂,但关键在于思路的转变:从“脚本怎么又失败了”,切换为“npm 在这一层到底失败在哪里”。当我们手动复现安装过程、打开 verbose 日志、直面真实错误栈时,问题就不再是模糊的“安装不了”,而是一个可以被定位、被验证、被修复的具体工程问题。

博客 1万+

Qt/C++ 如何删除QListWidget的指定项

本文简单介绍了一种如何在QListWidget删除匹配指定字符串的项的方法。

Duran.L的专栏 4033

RAG 实战:LangChain + 向量数据库构建知识问答系统

从文档加载、分割、嵌入到检索增强生成,完整实现一个基于本地文档的知识问答系统。

kaixin110a的博客 189

Qt4_使用项视图的简便类

使用项视图的简便类 使用。的项视图中那些方便的子类通常要比定义一个自定义模型简单得多,并且姐果我们不需 要由区分模型和视图所带来的好处时,这种方法也是比较合适的。 Flowchart Symbol Picker 演示了一个只读的QListWidget。先从一个允许用户在列表中选择流程图符号的简单对话框开始。每个项都由一个图标、一段文本和一个唯一的ID组成。 FlowChartSymbolPicker.h #ifndef FLOWCHARTSYMBOLPICKER_H #define FLOWCHARTSYM

qq_36314864的博客 268

Avalonia 超级详细学习指南

什么是 Avalonia?Avalonia 是一个开源的、跨平台的 GUI 框架,允许开发者使用 XAML 和 C# 构建现代化、高性能的桌面应用程序。与其他框架相比,Avalonia 具有强大的跨平台能力和灵活的界面设计。} }()Avalonia 的特点和优势跨平台性:Avalonia 可以在 Windows、Linux、macOS 等多个平台上运行,开发者可以编写一套代码,然后在不同的操作系统上运行相同的应用程序。

仰望星空的博客 1万+

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

上一篇: Qt学习:项视图类
下一篇: Qt学习:项视图类之QTableWidget
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值