您当前的位置: 首页 >  qt

lw只吃亿点.

暂无认证

  • 8浏览

    0关注

    47博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

lw只吃亿点. 发布时间:2022-07-01 22:14:30 ,浏览量:8

文章目录
  • 一、下拉列表框插入复选框示例图
  • 二、源码
    • ComboBoxTest.h
    • ComboBoxTest.cpp
  • 总结

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

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

二、源码 ComboBoxTest.h
#ifndef COMBOBOXTEST_H
#define COMBOBOXTEST_H

#include 
#include 

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

ComboBoxTest.cpp
#include "ComboBoxTest.h"
#include "ui_ComboBoxTest.h"

#include 

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

总结

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

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

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

关注
打赏
1654352885
查看更多评论
立即登录/注册

微信扫码登录

0.0730s