1.测试工程配置

创建名为QtGuiAppTest的qwidget工程,带ui文件
在.ui中拖拽一个QListWidget控件到界面,自动生成对象名称listWidget
在这里插入图片描述

2. 成员函数

2.1 void addItem(const QString &label)

(1)功能说明
为列表添加一行,内容为qstring类型的label值
(2)效果展示
在这里插入图片描述
(3)调用程序

QtGuiAppTest::QtGuiAppTest(QWidget *parent)
    : QWidget(parent)
{
    ui.setupUi(this);
    ui.listWidget->addItem("test1");
    ui.listWidget->addItem("test2");
}

2.2 void addItem(QListWidgetItem *item)

(1)功能说明
为列表添加一行,内容为QListWidgetItem类型的对象,显示该对象的data内容
(2)效果展示
在这里插入图片描述

(3)调用程序

QtGuiAppTest::QtGuiAppTest(QWidget *parent)
    : QWidget(parent)
{
    ui.setupUi(this);
    ui.listWidget->addItem(new  QListWidgetItem("test1"));
    ui.listWidget->addItem(new  QListWidgetItem("test2"));
}

(4)备注说明
关于QListWidgetItem的功能说明和使用会在其他文章中介绍

2.3 void addItems(const QStringList &labels)

(1)功能说明
为列表一次性添加多行类型为qstring的对象
(2)效果展示
在这里插入图片描述
(3)调用程序

QtGuiAppTest::QtGuiAppTest(QWidget *parent)
    : QWidget(parent)
{
    ui.setupUi(this);
    ui.listWidget->addItems(QStringList() <<"test1_QStringList" <<"test2_QStringList" <<"test3_QStringList");
}

2.4 void openPersistentEditor(QListWidgetItem *item)

(1)功能说明
为列表中指定的行,打开持续编辑功能。打开后该行内容一直处于可编辑状态
(2)效果展示
在这里插入图片描述

第一行始终由一个编辑框包括,提示随时可编辑
(3)调用程序

QtGuiAppTest::QtGuiAppTest(QWidget *parent)
    : QWidget(parent)
{
    ui.setupUi(this);
    //先创建两个item
    QListWidgetItem* ptest1 = new  QListWidgetItem("test1_openPersistentEditor");
    QListWidgetItem* ptest2 = new  QListWidgetItem("test2");
    //item添加进列表
    ui.listWidget->addItem(ptest1);
    ui.listWidget->addItem(ptest2);
    //ptest1打开持续编辑功能,ptest2不打开
    ui.listWidget->openPersistentEditor(ptest1);
}

2.5 void closePersistentEditor(QListWidgetItem *item)

(1)功能说明
关闭指定行的持续编辑功能,与openPersistentEditor成员函数对应

2.6 bool isPersistentEditorOpen(QListWidgetItem *item) const

(1)功能说明
判断当前行对象是否是持续可编辑的

2.7int count() const

(1)功能说明
统计列表中的行数

2.8 QListWidgetItem * currentItem() const

(1)功能说明
获取当前选中行的对象
(2)效果展示
在列表中选择不同的行,右侧的label显示选中行的内容
在这里插入图片描述
(3)调用程序
QtGuiAppTest.ui
在这里插入图片描述
QtGuiAppTest.h

添加槽函数 SlotTestCurrentItem声明
#include <QtWidgets/QWidget>
#include "ui_QtGuiAppTest.h"
class QtGuiAppTest : public QWidget
{
    Q_OBJECT
public:
    QtGuiAppTest(QWidget *parent = Q_NULLPTR);
public slots:
    void SlotTestCurrentItem();
private:
    Ui::QtGuiAppTestClass ui;
};

QtGuiAppTest.cpp

#include "QtGuiAppTest.h"
QtGuiAppTest::QtGuiAppTest(QWidget *parent)
    : QWidget(parent)
{
    ui.setupUi(this);
    //为列表添加三行
    ui.listWidget->addItems(QStringList() <<  QString::fromLocal8Bit("张三") <<
                            QString::fromLocal8Bit("李四") <<
                            QString::fromLocal8Bit("王五"));
    //将列表的选择改变信号与SlotTestCurrentItem槽函数连接起来,
    //每次列表中行选择改变就会执行SlotTestCurrentItem函数
    connect(ui.listWidget,  &QListWidget::itemSelectionChanged, this,
            &QtGuiAppTest::SlotTestCurrentItem);
}
void QtGuiAppTest::SlotTestCurrentItem()
{
    //获取列表中当前选中的行
    QListWidgetItem* pitem =  ui.listWidget->currentItem();
    //将当前选中的行在界面的qlabel控件中显示
     ui.label->setText(pitem->data(Qt::DisplayRole).toString());
}

2.9 int currentRow() const

(1)功能说明
获取列表中当前选中的行号
(2)效果展示
在列表中选择不同的行,右侧的label显示选的第几行
在这里插入图片描述
(3)调用程序
在2.8节用例的基础上,修改槽函数SlotTestCurrentItem()

void QtGuiAppTest::SlotTestCurrentItem()
{
    //获取列表中当前选中的行数
    int nRow = ui.listWidget->currentRow();
    //将当前选中的行在界面的qlabel控件中显示
    ui.label->setText(QString::number(nRow));
}

2.10 void editItem(QListWidgetItem *item)

(1)功能说明
在选中指定行时,如果该行对象是可编辑的,则直接进入编辑状态
(2)效果展示
在这里插入图片描述
(3)调用程序
在2.8节的基础上,修改槽函数SlotTestCurrentItem()

void QtGuiAppTest::SlotTestCurrentItem()
{
    //获取列表中当前选中的行数
    QListWidgetItem* pitm =  ui.listWidget->currentItem();
    //将选中项设置为可编辑的
    pitm->setFlags(Qt::ItemIsEnabled |  Qt::ItemIsEditable);
    //开始编辑(直接进入编辑状态)
    ui.listWidget->editItem(pitm);
}

(4)备注说明
如果上述程序中不写 ui.listWidget->editItem(pitm);选中行也可以编辑(setFlags设置了可编辑),但是需要双击才能进入编辑状态,而调用editItem,后选中行的同时就会直接进入编辑状态

2.11 QList<QListWidgetItem *> findItems(const QString &text, Qt::MatchFlags flags) const

(1)功能说明
在列表中查询与第一个输入参数text匹配的行,匹配规则由第二个输入参数flags指定,返回所有匹配行的对象列表。
其中第二个参数为枚举类型,各个枚举值的含义如下

常量名常量值描述
Qt::MatchExactly0精确匹配(匹配大小写)
Qt::MatchFixedString8基于字符串的匹配,且不区分大小写
Qt::MatchContains1包含指定字符串即匹配成功
Qt::MatchStartsWith2从开头的第一个字符开始匹配
Qt::MatchEndsWith3从末尾的第一个字符开始匹配
Qt::MatchCaseSensitive16区分大小写匹配
Qt::MatchRegExp4正则表达式匹配
Qt::MatchWildcard5使用带有通配符的字符串进行基于字符串的匹配
Qt::MatchWrap32循环搜索,当搜到末尾时再从头开始搜索,直到检查完所有的项
Qt::MatchRecursive64搜索整个结构

(2)效果
在这里插入图片描述
(3)程序调用
QtGuiAppTest.ui
在这里插入图片描述
添加对象名为lineEdit的QLineEdit
添加对象名为pushButton的QPushButton

QtGuiAppTest.h

#pragma once
#include <QtWidgets/QWidget>
#include "ui_QtGuiAppTest.h"
class QtGuiAppTest : public QWidget
{
    Q_OBJECT
public:
    QtGuiAppTest(QWidget *parent = Q_NULLPTR);
public slots:
    void SlotTestFindItem();
private:
    Ui::QtGuiAppTestClass ui;
};

添加槽函数SlotTestFindItem

QtGuiAppTest.cpp

#include "QtGuiAppTest.h"
QtGuiAppTest::QtGuiAppTest(QWidget *parent)
    : QWidget(parent)
{
    ui.setupUi(this);
    //为列表添加三行
    ui.listWidget->addItems(QStringList() <<  QString::fromLocal8Bit("张三") <<
                            QString::fromLocal8Bit("李四") <<
                            QString::fromLocal8Bit("王五") <<
                            QString::fromLocal8Bit("张五") <<
                            QString::fromLocal8Bit("刘三一")
                           );
    //将按钮与槽函数连接起来
    connect(ui.pushButton, &QPushButton::clicked, this,  &QtGuiAppTest::SlotTestFindItem);
}
void QtGuiAppTest::SlotTestFindItem()
{
    //获取linedit中要查找的字符串
    QString str = ui.lineEdit->text();
    //在列表中查找匹配的行,采用精确查找
    QList<QListWidgetItem*> lstItems =  ui.listWidget->findItems(str, Qt::MatchContains);
    //在label中展示查找到的结果
    QString text;
    for(auto& it : lstItems)
    {
        text += it->data(Qt::DisplayRole).toString();
        text += "\n";
    }
    ui.label->setText(text);
}

2.12 void insertItem(int row, QListWidgetItem *item)

(1)功能描述
在指定行插入对象
(2)效果
在这里插入图片描述

(3)调用程序
QtGuiAppTest.ui
在这里插入图片描述
添加对象名称为lineEdit的QLineEdit用于存储指定行数
添加对象名称为lineEdit_2的QLineEdit用于存储指定内容

QtGuiAppTest.h

#pragma once
#include <QtWidgets/QWidget>
#include "ui_QtGuiAppTest.h"
class QtGuiAppTest : public QWidget
{
    Q_OBJECT
public:
    QtGuiAppTest(QWidget *parent = Q_NULLPTR);
public slots:
    void SlotTestInsertItem();
private:
    Ui::QtGuiAppTestClass ui;
};

添加槽函数 SlotTestInsertItem();

QtGuiAppTest.cpp

#include "QtGuiAppTest.h"
QtGuiAppTest::QtGuiAppTest(QWidget *parent)
    : QWidget(parent)
{
    ui.setupUi(this);
    //为列表添加三行
    ui.listWidget->addItems(QStringList() <<  QString::fromLocal8Bit("张三") <<
                            QString::fromLocal8Bit("李四") <<
                            QString::fromLocal8Bit("王五")
                           );
    //将按钮与槽函数连接起来
    connect(ui.pushButton, &QPushButton::clicked, this,  &QtGuiAppTest::SlotTestInsertItem);
}
void QtGuiAppTest::SlotTestInsertItem()
{
    //获取插入行数
    int nRow = ui.lineEdit->text().toInt();
    //获取待插入的内容
    QString str = ui.lineEdit_2->text();
    //执行插入操作
    ui.listWidget->insertItem(nRow, new  QListWidgetItem(str));
}

2.13 void insertItem(int row, const QString &label)

(1)功能说明
通过输入字符串在指定行插入对象
(2)效果
同第2.12节中的效果
(3)调用程序
修改第2.12节中的槽函数 SlotTestInsertItem

void QtGuiAppTest::SlotTestInsertItem()
{
    //获取插入行数
    int nRow = ui.lineEdit->text().toInt();
    //获取待插入的内容
    QString str = ui.lineEdit_2->text();
    //执行插入操作
    ui.listWidget->insertItem(nRow, str);
}

2.14 void insertItems(int row, const QStringList &labels)

(1)功能说明
通过输入字符串列表插入多行
(2)效果
在这里插入图片描述

(3)调用程序
修改第2.12节中的槽函数 SlotTestInsertItem

void QtGuiAppTest::SlotTestInsertItem()
{
    //获取插入行数
    int nRow = ui.lineEdit->text().toInt();
    //获取待插入的内容
    QString str = ui.lineEdit_2->text();
    //执行插入操作
    ui.listWidget->insertItems(nRow, QStringList() <<  str << str << str);
}

2.15 void sortItems(Qt::SortOrder order = Qt::AscendingOrder)

(1)功能说明
对列表进行排序
(2)效果展示
在这里插入图片描述

(3)调用程序
QtGuiAppTest.ui
在这里插入图片描述

QtGuiAppTest.h

#pragma once
#include <QtWidgets/QWidget>
#include "ui_QtGuiAppTest.h"
class QtGuiAppTest : public QWidget
{
    Q_OBJECT
public:
    QtGuiAppTest(QWidget *parent = Q_NULLPTR);
public slots:
    void SlotTestSort(const QString& text);
private:
    Ui::QtGuiAppTestClass ui;
};

QtGuiAppTest.cpp

#include "QtGuiAppTest.h"
#include<qcombobox.h>
QtGuiAppTest::QtGuiAppTest(QWidget *parent)
    : QWidget(parent)
{
    ui.setupUi(this);
    ui.listWidget->addItems(QStringList() << "red" <<  "blue" << "white" << "green");
    ui.listWidget->sortItems();
    connect(ui.comboBox, QOverload<const  QString&>::of(&QComboBox::currentIndexChanged), this,
            &QtGuiAppTest::SlotTestSort);
}
void QtGuiAppTest::SlotTestSort(const QString& text)
{
    if(text == "AscendingOrder")
    {
        //由小到大排序
        ui.listWidget->sortItems(Qt::AscendingOrder);
    }
    else if(text == "DescendingOrder")
    {
        //由大到小排序
        ui.listWidget->sortItems(Qt::DescendingOrder);
    }
}

2.16 void setSortingEnabled(bool enable)

(1)功能说明
如果设置为true,则列表进行自动由小到大排序。默认为false
(2)效果
在这里插入图片描述

(3)程序调用

QtGuiAppTest::QtGuiAppTest(QWidget *parent)
    : QWidget(parent)
{
    ui.setupUi(this);
    //设置列表为有序的
    ui.listWidget->setSortingEnabled(true);
    //为列表添加数据
    ui.listWidget->addItems(QStringList() <<  QString::fromLocal8Bit("zhansan") <<
                             QString::fromLocal8Bit("lisi") <<
                             QString::fromLocal8Bit("wangwu") <<
                             QString::fromLocal8Bit("mazi"));
}

2.17 bool isSortingEnabled() const

(1)功能说明
判断列表是否是被设置为有序的,与第2.16节相关

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐