QListWidget 小节
- QListWidget 简介
- 举例
- UI设计
- 头文件
- 源文件
QListWidget 简介
以下是 QListWidget 常用函数的一些说明:
addItem(item):向列表中添加一个项。
addItems(items):向列表中添加多个项。
clear():清空列表中的所有项。
count():返回列表中的项数。
currentItem():返回当前选中的项。
currentRow():返回当前选中项的行索引。
setCurrentRow(row):设置当前选中项的行索引。
setCurrentItem(item):设置当前选中的项。
item(row):返回指定行索引的项。
itemAt(x, y):返回给定坐标处的项。
row(item):返回给定项的行索引。
row(item):返回给定项的行索引。
selectedItems():返回当前选中的所有项。
setSelectionMode(mode):设置选择模式,如 SingleSelection(单选)、MultiSelection(多选)等。
takeItem(row):移除并返回给定行索引处的项。
setSortingEnabled(enabled):启用或禁用排序功能。
sortItems(order):按照指定排序顺序对项进行排序。
setIconSize(size):设置项中图标的尺寸。
setViewMode(mode):设置显示模式,如列表模式或图标模式。
findItems(text, flags):根据指定的文本和标志在列表中查找匹配的项。
以下是 QListWidget 常用的信号:
itemClicked(item):当用户点击列表中的一个项时触发,返回被点击的项。
itemDoubleClicked(item):当用户双击列表中的一个项时触发,返回被双击的项。
itemSelectionChanged():当列表的选中项发生变化时触发,无参数返回。
currentTextChanged(text):当当前选中项的文本发生变化时触发,返回当前选中项的文本。
currentRowChanged(currentRow):当当前选中项的行索引发生变化时触发,返回当前选中项的行索引。
currentColumnChanged(currentColumn):当当前选中项的列索引发生变化时触发,返回当前选中项的列索引。
itemEntered(item):当鼠标光标进入一个项时触发,返回进入的项。
itemPressed(item):当用户按下鼠标在一个项上时触发,返回被按下的项。
itemActivated(item):当用户激活(双击项,按下Enter键)一个项时触发,返回被激活的项。
itemChanged(item):当用户编辑项后,项的内容发生变化时触发,返回发生变化的项。
举例
UI设计
头文件
#ifndef FORM_H
#define FORM_H
#include <QWidget>
#include <QListWidget>
#include <QPushButton>
#include <QVBoxLayout>
#include <QLineEdit>
namespace Ui {
class Form;
}
class Form : public QWidget
{
Q_OBJECT
public:
explicit Form(QWidget *parent = nullptr);
~Form();
private slots:
void itemClicked(QListWidgetItem *item);
void updateItem();
private:
Ui::Form *ui;
QListWidget *m_listWidget;
QLineEdit *m_lineEdit;
QPushButton *m_PB;
};
#endif // FORM_H
源文件
#include "form.h"
#include "ui_form.h"
Form::Form(QWidget *parent) :
QWidget(parent),
ui(new Ui::Form)
{
ui->setupUi(this);
// 创建垂直布局
QVBoxLayout *v_Layout = new QVBoxLayout(this);
m_listWidget = new QListWidget(this);
// 添加组件
v_Layout->addWidget(m_listWidget);
m_lineEdit = new QLineEdit(this);
v_Layout->addWidget(m_lineEdit);
m_PB = new QPushButton("Quit", this);
v_Layout->addWidget(m_PB);
// 设置布局
this->setLayout(v_Layout);
QStringList cities;
cities << "BeiJing" << "GuiZhou" << "CPDD";
foreach(const QString& city, cities) {
m_listWidget->addItem(city);
}
connect(m_listWidget, &QListWidget::itemClicked,this,&Form::itemClicked);
connect(m_lineEdit, &QLineEdit::editingFinished,this,&Form::updateItem);
connect(m_PB, SIGNAL(clicked()), qApp, SLOT(quit()));
}
Form::~Form()
{
delete ui;
}
void Form::itemClicked(QListWidgetItem *item)
{
// item !=0
Q_ASSERT(item); // 如果测试为false,则打印包含源代码文件名和行号的警告消息。
// Q_ASSERT()可用于测试开发过程中的前置和后置条件。如果在编译期间定义了QT_NO_DEBUG,则它将不起任何作用。
m_lineEdit->setText(item->text());
}
void Form::updateItem()
{
QListWidgetItem* item = m_listWidget->currentItem();
if (item) {
item->setText(m_lineEdit->text());
}
}