【嵌入式——QT】QListWidget

QListWidget类提供了一个基于项的列表小部件,QListWidgetItem是列表中的项,该篇文章中涉及到的功能有添加列表项,插入列表项,删除列表项,清空列表,向上移动列表项,向下移动列表项。
QListWidget是一个便利类,它提供了一个类似于QListView提供的列表视图,但具有用于添加和删除项的经典基于项的接口。QListWidget使用一个内部模型管理列表中的每个QListWidgetItem。
对于更灵活的列表视图小部件,可以使用标准模型的QListView类

常用API

  • addItem(const QString &label):添加项;
  • addItems(const QStringList &labels):添加集合项;
  • insertItem(int row, QListWidgetItem *item):插入项;
  • currentItem() const:当前项
  • currentRow() const:当前行;
  • item(int row) const:如果列表中给定行的元素被设置,则返回对应的元素;否则返回null;
  • row(const QListWidgetItem *item) const:返回包含给定项的行;
  • count() const:反列表中项目的数量;
  • takeItem(int row):移除项;

常用信号

  • void currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous):每当当前元素发生变化时,就会发出这个信号;

  • void currentRowChanged(int currentRow):每当当前元素发生变化时,就会发出这个信号;

  • void currentTextChanged(const QString &currentText):每当当前元素发生变化时,就会发出这个信号;

  • void itemActivated(QListWidgetItem *item):当项目被激活时,这个信号就会发出。根据系统配置,当用户单击或双击该项目时,该项目将被激活;

  • void itemChanged(QListWidgetItem *item):每当item的数据发生变化时,就会发出这个信号;

  • void itemClicked(QListWidgetItem *item):当鼠标按钮单击部件中的某个项目时,该信号由指定的项目发出;

  • void itemDoubleClicked(QListWidgetItem *item):当鼠标按钮双击部件中的某个项目时,该信号由指定的项目发出;

  • void itemEntered(QListWidgetItem *item):当鼠标光标进入某个元素时,就会发出这个信号。项目就是输入的项目。这个信号只有在mouseTracking被打开,或者鼠标移动到某个元素时按下了鼠标按钮时才会发出;

  • void itemPressed(QListWidgetItem *item):当在部件中的某个项目上按下鼠标按钮时,该信号由指定的项目发出;

  • void itemSelectionChanged():每当选择发生变化时,就会发出这个信号;

    槽函数

  • void scrollToItem(const QListWidgetItem *item, QAbstractItemView::ScrollHint hint = EnsureVisible):如果需要,滚动视图以确保项目可见;

  • clear():清空列表;

QListWidgetItem
QListWidgetItem表示QListWidget中的单个项目。每个物品都可以包含若干信息,并将适当地显示它们。
item view便利类使用经典的基于item的接口,而不是纯粹的model/view方法。要获得更灵活的列表视图小部件,请考虑使用标准模型的QListView类。

QListWidgetItem常用函数

  • data(int role) const:返回指定角色的项目数据;
  • checkState() const:返回列表项的选中状态;
  • flags() const:返回该项的项标志;
  • font() const:返回用于显示列表项文本的字体;
  • listWidget() const:返回包含项目的列表小部件;
  • setCheckState(Qt::CheckState state):将列表项的检查状态设置为state;
  • setData(int role, const QVariant &value):将给定角色的数据设置为给定的值;
  • setFlags(Qt::ItemFlags flags):将列表项的项标志设置为flags;
  • setFont(const QFont &font):将绘制项目时使用的字体设置为给定的字体;
  • setSelected(bool select):将项的选中状态设置为选中;
  • setStatusTip(const QString &statusTip):将列表项的状态提示设置为statusTip指定的文本;
  • setText(const QString &text):将列表部件项的文本设置为给定的文本;
  • setTextAlignment(int alignment):设置列表项的文本对齐方式为alignment;
  • text() const:返回列表项的文本;
  • type() const:返回传递给QListWidgetItem构造函数的类型;
  • read(QDataStream &in):从流中读取项目;
  • write(QDataStream &out) const:将项写入流输出;

图片示例
在这里插入图片描述
代码示例
QlistWidgetDialog.h

#ifndef QLISTWIDGETDIALOG_H
#define QLISTWIDGETDIALOG_H

#include <QDialog>
#include <QListWidgetItem>
namespace Ui
{
    class QlistWidgetDialog;
}

class QlistWidgetDialog : public QDialog
{
    Q_OBJECT

public:
    explicit QlistWidgetDialog(QWidget* parent = nullptr);
    ~QlistWidgetDialog();

private slots:
    void on_pushButtonAdd_clicked();

    void on_pushButtonUp_clicked();

    void on_pushButtonDown_clicked();

    void on_pushButtonRemove_clicked();

    void on_pushButtonClear_clicked();

    void on_pushButtonInsert_clicked();

    void on_listWidget_currentRowChanged(int currentRow);

    void on_listWidget_currentItemChanged(QListWidgetItem* current, QListWidgetItem* previous);

    void on_listWidget_currentTextChanged(const QString& currentText);

    void on_listWidget_customContextMenuRequested(const QPoint& pos);

private:
    Ui::QlistWidgetDialog* ui;


};

#endif // QLISTWIDGETDIALOG_H

QlistWidgetDialog.cpp

#include "QlistWidgetDialog.h"
#include "ui_QlistWidgetDialog.h"
#include <QListWidgetItem>>
#include <QDebug>
#include <QMenu>
QlistWidgetDialog::QlistWidgetDialog(QWidget* parent)
    : QDialog(parent)
    , ui(new Ui::QlistWidgetDialog)
{
    ui->setupUi(this);
    //listWidget属性设置为自定义菜单 才可以鼠标右键自定义右键菜单
    ui->listWidget->setContextMenuPolicy(Qt::CustomContextMenu);
}

QlistWidgetDialog::~QlistWidgetDialog()
{
    delete ui;
}

void QlistWidgetDialog::on_pushButtonAdd_clicked()
{
    QString text = ui->lineEdit->text();
    QListWidgetItem* item = new QListWidgetItem(text);
    // 可编辑
    item->setFlags(Qt::ItemIsEditable | Qt::ItemIsEnabled);
    ui->listWidget->addItem(item);
}


void QlistWidgetDialog::on_pushButtonUp_clicked()
{
    QListWidgetItem* selectItem = ui->listWidget->currentItem();
    int curRow = ui->listWidget->row(selectItem);
    if(curRow > 0) {
        ui->listWidget->takeItem(curRow);
        ui->listWidget->insertItem(curRow - 1, selectItem);
        ui->listWidget->setCurrentItem(selectItem);
    }
}


void QlistWidgetDialog::on_pushButtonDown_clicked()
{
    QListWidgetItem* selectItem = ui->listWidget->currentItem();
    int curRow = ui->listWidget->row(selectItem);
    if(curRow < ui->listWidget->count() - 1) {
        //移除当前行号的item
        ui->listWidget->takeItem(curRow);
        //在curRow+1位置插入选中的item
        ui->listWidget->insertItem(curRow + 1, selectItem);
        //设置选中的item为当前item
        ui->listWidget->setCurrentItem(selectItem);
    }
}


void QlistWidgetDialog::on_pushButtonRemove_clicked()
{
    int row = ui->listWidget->currentRow();
    //移除项
    QListWidgetItem* dItem = ui->listWidget->takeItem(row);
    //删除对象
    delete dItem;
}



void QlistWidgetDialog::on_pushButtonClear_clicked()
{
    ui->listWidget->clear();
}


void QlistWidgetDialog::on_pushButtonInsert_clicked()
{
    QString text = ui->lineEdit->text();
    int curRow = ui->listWidget->currentRow();
    QListWidgetItem* newItem = new QListWidgetItem(text);
    ui->listWidget->insertItem(curRow, newItem);
}


void QlistWidgetDialog::on_listWidget_currentRowChanged(int currentRow)
{
    qDebug()<<"currentRow"<<currentRow;
}


void QlistWidgetDialog::on_listWidget_currentItemChanged(QListWidgetItem* current, QListWidgetItem* previous)
{
    // QString curText = current->text();
    // QString preText = previous->text();
    // qDebug()<<"curText"<<curText<<"preText"<<preText;
}


void QlistWidgetDialog::on_listWidget_currentTextChanged(const QString& currentText)
{
    qDebug()<<"currentText"<<currentText;
}

//鼠标右键
void QlistWidgetDialog::on_listWidget_customContextMenuRequested(const QPoint& pos)
{
    Q_UNUSED(pos);
    QMenu* menu = new QMenu(this);
    QAction* act1 = new  QAction("act1");
    QAction* act2 = new  QAction("act2");
    QAction* act3 = new  QAction("act3");
    QAction* act4 = new  QAction("act4");
    menu->addAction(act1);
    menu->addAction(act2);
    menu->addAction(act3);
    menu->addAction(act4);
    menu->exec(QCursor::pos());//在鼠标光标位置显示右键快捷菜单
    delete menu;
}


  • 40
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值