• Qt之QComboBox添加QCheckBox(下拉列表框插入复选框,含源码+注释)


    一、下拉列表框插入复选框示例图

    下图为带复选框的下拉列表框示例图,其中包含添加项,选中项,勾选复选框等操作。
    在这里插入图片描述
    提示:不会使用Qt设计师设计界面的小伙伴点击这里

    二、源码

    ComboBoxTest.h

    #ifndef COMBOBOXTEST_H
    #define COMBOBOXTEST_H
    
    #include <QWidget>
    #include <QListWidget>
    
    namespace Ui {
    class ComboBoxTest;
    }
    
    class ComboBoxTest : public QWidget
    {
        Q_OBJECT
    
    public:
        explicit ComboBoxTest(QWidget *parent = nullptr);
        ~ComboBoxTest();
    
    private slots:
        /**
         * @brief on_addBtn_clicked 添加item按钮点击槽函数
         */
        void on_addBtn_clicked();
    
        /**
         * @brief on_comboBox_currentIndexChanged 下拉列表框切换选项槽函数
         * @param index 切换后的index索引位置
         */
        void on_comboBox_currentIndexChanged(int index);
    
    private:
        Ui::ComboBoxTest    *ui;
    
        QListWidget         *m_listWidget;  // 下拉列表框的
    };
    
    #endif // COMBOBOXTEST_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

    ComboBoxTest.cpp

    #include "ComboBoxTest.h"
    #include "ui_ComboBoxTest.h"
    
    #include <QCheckBox>
    
    ComboBoxTest::ComboBoxTest(QWidget *parent)
        : QWidget(parent)
        , ui(new Ui::ComboBoxTest)
    {
        ui->setupUi(this);
        // 设置窗口标题
        this->setWindowTitle("ComboBox带复选框");
    
        // 创建QListWidget对象空间
        m_listWidget = new QListWidget;
    
        // 要先设置model,然后在设置view,我测试时反过来设置会崩掉哦
        //! 将comboBox的model对象设置为QListWidget对象的model
        //! 因为QListWidget继承QListView所以其存在model对象
        ui->comboBox->setModel(m_listWidget->model());
    
        //! 将comboBox的view对象设置为QListWidget对象
        //! 因为QListWidget继承QListView所以相当于View
        ui->comboBox->setView(m_listWidget);
    
        //! 此处添加一个空item用于当默认值
        // 创建QListWidgetItem对象并指定父对象
        QListWidgetItem *item = new QListWidgetItem(m_listWidget);
        // 将item添加到QListWidget对象中
        m_listWidget->addItem(item);
    }
    
    ComboBoxTest::~ComboBoxTest()
    {
        //释放QListWidget、ui的存储空间
        delete m_listWidget;
        delete ui;
    }
    
    void ComboBoxTest::on_addBtn_clicked()
    {
        // 获取要添加item上显示的文本
        QString text = ui->lineEdit->text();
    
        // 当文本为空时直接返回,不添加
        if(text.isEmpty())
        {
            return;
        }
    
        //! 创建复选框对象空间
        //! 创建时指定复选框的父对象,其父对象在释放时会将其中的子对象指针先释放
        QCheckBox *checkBox = new QCheckBox(m_listWidget);
    
        // 创建QListWidgetItem对象并传入文本和指定父对象
        QListWidgetItem *item = new QListWidgetItem(text, m_listWidget);
        //设置item文本居中
        item->setTextAlignment(Qt::AlignCenter);
    
        //将item添加到QListWidget对象中
        m_listWidget->addItem(item);
        //将复选框设置到item中
        m_listWidget->setItemWidget(item, checkBox);
    }
    
    void ComboBoxTest::on_comboBox_currentIndexChanged(int index)
    {
        //获取当前索引位置的item
        QListWidgetItem *item = m_listWidget->item(index);
        //当获取的item为空时返回
        if(nullptr == item)
        {
            return;
        }
    
        //获取当前选项的文本
        QString itemStr = item->text();
    
        //获取当前选项所在复选框的widget对象
        QWidget *widget = m_listWidget->itemWidget(item);
        //将widget对象转换为checkBox对象
        QCheckBox *checkBox = dynamic_cast<QCheckBox *>(widget);
        //当获取的checkBox为空时返回
        if(nullptr == checkBox)
        {
            ui->textBrowser->append("空");
            return;
        }
    
        //根据checkBox的勾选状态获取文本
        QString checkBoxStr = checkBox->isChecked()? "已勾选": "未勾选";
    
        //组合text
        QString text = QString("索引位置:%1  文本:%2  选中状态:%3")
                .arg(index).arg(itemStr).arg(checkBoxStr);
    
        //将文本追加到文本栏中
        ui->textBrowser->append(text);
    }
    
    
    • 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

    总结

    在本文on_comboBox_currentIndexChanged获取到了复选框对象,可以在这里做出复选框应有的判断,或者在创建复选框时连接槽函数等操作;具体详解都在注释中,有意者细读哦😊。

    友情提示——哪里看不懂可私哦,让我们一起互相进步吧
    (创作不易,请留下一个免费的赞叭 谢谢 ^o^/)

    注:文章为作者编程过程中所遇到的问题和总结,内容仅供参考,若有错误欢迎指出。
    注:如有侵权,请联系作者删除

  • 相关阅读:
    二、互联网技术——网络协议
    只要做好充分准备,丢失的苹果设备多半可以找回来,包括AirPods
    【算法-双指针思想】
    POJ 1222 EXTENDED LIGHTS OUT 反转+点灯游戏
    DHCP协议从入门到部署DHCP服务器进行实验
    ORACLE游标详解
    【Java I/O 流】字节数组流:ByteArrayInputStream 和 ByteArrayOutputStream
    开源两个月总结
    【数据结构-树】红黑树
    企业能源管控平台在轧钢行业能源管理中的应用
  • 原文地址:https://blog.csdn.net/wj584652425/article/details/125566428