QListWidget 小节


QListWidget 简介

以下是 QListWidget 常用函数的一些说明:

  1. addItem(item):向列表中添加一个项。

  2. addItems(items):向列表中添加多个项。

  3. clear():清空列表中的所有项。

  4. count():返回列表中的项数。

  5. currentItem():返回当前选中的项。

  6. currentRow():返回当前选中项的行索引。

  7. setCurrentRow(row):设置当前选中项的行索引。

  8. setCurrentItem(item):设置当前选中的项。

  9. item(row):返回指定行索引的项。

  10. itemAt(x, y):返回给定坐标处的项。

  11. row(item):返回给定项的行索引。

  12. row(item):返回给定项的行索引。

  13. selectedItems():返回当前选中的所有项。

  14. setSelectionMode(mode):设置选择模式,如 SingleSelection(单选)、MultiSelection(多选)等。

  15. takeItem(row):移除并返回给定行索引处的项。

  16. setSortingEnabled(enabled):启用或禁用排序功能。

  17. sortItems(order):按照指定排序顺序对项进行排序。

  18. setIconSize(size):设置项中图标的尺寸。

  19. setViewMode(mode):设置显示模式,如列表模式或图标模式。

  20. findItems(text, flags):根据指定的文本和标志在列表中查找匹配的项。


以下是 QListWidget 常用的信号:

  1. itemClicked(item):当用户点击列表中的一个项时触发,返回被点击的项。

  2. itemDoubleClicked(item):当用户双击列表中的一个项时触发,返回被双击的项。

  3. itemSelectionChanged():当列表的选中项发生变化时触发,无参数返回。

  4. currentTextChanged(text):当当前选中项的文本发生变化时触发,返回当前选中项的文本。

  5. currentRowChanged(currentRow):当当前选中项的行索引发生变化时触发,返回当前选中项的行索引。

  6. currentColumnChanged(currentColumn):当当前选中项的列索引发生变化时触发,返回当前选中项的列索引。

  7. itemEntered(item):当鼠标光标进入一个项时触发,返回进入的项。

  8. itemPressed(item):当用户按下鼠标在一个项上时触发,返回被按下的项。

  9. itemActivated(item):当用户激活(双击项,按下Enter键)一个项时触发,返回被激活的项。

  10. 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());
    }
}

猜你喜欢

转载自blog.csdn.net/m0_45463480/article/details/131730230