• 【嵌入式——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 ¤tText):每当当前元素发生变化时,就会发出这个信号;

    • 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 
    #include 
    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
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47

    QlistWidgetDialog.cpp

    #include "QlistWidgetDialog.h"
    #include "ui_QlistWidgetDialog.h"
    #include >
    #include 
    #include 
    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"<
    }
    
    
    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;
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
  • 相关阅读:
    建模杂谈系列158 再探函数链的实现
    数据仓库---Hive
    【webrtc】IsNewerTimestamp 时间戳新旧比较及使用
    如何判断结构体是否相等?能否用 memcmp 函数判断结构体相等?
    CSMACD协议与CSMACA协议
    ActiveMQ、RabbitMQ、RocketMQ、Kafka介绍
    linux shell环境下处理yml文件
    【Python黑科技】cv2库实现证件照抠图替换背景(注释比代码多)
    API安全
    13. 一文快速学懂常用工具——Kubernetes 命令
  • 原文地址:https://blog.csdn.net/weixin_39723539/article/details/136393423