QListWidget成员函数功能和使用详细说明(一)(文字+用例+代码+效果图)
文章目录
- 1.测试工程配置
- 2. 成员函数
- 2.1 void addItem(const QString &label)
- 2.2 void addItem(QListWidgetItem *item)
- 2.3 void addItems(const QStringList &labels)
- 2.4 void openPersistentEditor(QListWidgetItem *item)
- 2.5 void closePersistentEditor(QListWidgetItem *item)
- 2.6 bool isPersistentEditorOpen(QListWidgetItem *item) const
- 2.7int count() const
- 2.8 QListWidgetItem * currentItem() const
- 2.9 int currentRow() const
- 2.10 void editItem(QListWidgetItem *item)
- 2.11 QList<QListWidgetItem *> findItems(const QString &text, Qt::MatchFlags flags) const
- 2.12 void insertItem(int row, QListWidgetItem *item)
- 2.13 void insertItem(int row, const QString &label)
- 2.14 void insertItems(int row, const QStringList &labels)
- 2.15 void sortItems(Qt::SortOrder order = Qt::AscendingOrder)
- 2.16 void setSortingEnabled(bool enable)
- 2.17 bool isSortingEnabled() const
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::MatchExactly | 0 | 精确匹配(匹配大小写) |
| Qt::MatchFixedString | 8 | 基于字符串的匹配,且不区分大小写 |
| Qt::MatchContains | 1 | 包含指定字符串即匹配成功 |
| Qt::MatchStartsWith | 2 | 从开头的第一个字符开始匹配 |
| Qt::MatchEndsWith | 3 | 从末尾的第一个字符开始匹配 |
| Qt::MatchCaseSensitive | 16 | 区分大小写匹配 |
| Qt::MatchRegExp | 4 | 正则表达式匹配 |
| Qt::MatchWildcard | 5 | 使用带有通配符的字符串进行基于字符串的匹配 |
| Qt::MatchWrap | 32 | 循环搜索,当搜到末尾时再从头开始搜索,直到检查完所有的项 |
| Qt::MatchRecursive | 64 | 搜索整个结构 |
(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节相关
更多推荐



所有评论(0)