• 下拉框comobox--可勾选多个表项check


    ComboBoxWidget::ComboBoxWidget()
    {
        ui->setupUi(this);

        //安装过滤器
        ui->comboBox->installEventFilter(this);

        //下拉列表

        m_listWidget = new QListWidget;
        ui->comboBox->setModel(m_listWidget->model());
        ui->comboBox->setView(m_listWidget);
        ui->comboBox->setEditable(true);
        ui->comboBox->lineEdit()->setReadOnly(true);

        
        connect(ui->comboBox, SIGNAL(currentTextChanged(const QString &)), this, SLOT(slot_curTextChanged(const QString &)));
        connect(m_listWidget, SIGNAL(itemClicked(QListWidgetItem *)), this, SLOT(slot_itemClicked(QListWidgetItem *)));
    }

    //禁用鼠标点击,滚轮事件

    bool ComboBoxWidget::eventFilter(QObject *watched, QEvent *event)
    {
        if (watched == ui->comboBox)
        {
            if (event->type() == QEvent::MouseButtonPress || event->type() == QEvent::MouseButtonDblClick)
            {
                if (ui->comboBox == NULL || ui->comboBox->isVisible() == false)
                {
                    return true;
                }
            }
            else if (event->type() == QEvent::Wheel)
            {
                return true;
            }
        }
        return QWidget::eventFilter(watched, event);
    }

    //下拉列表添加表项

    void ComboBoxWidget::addItem(const QString& text)
    {
        QListWidgetItem *item = new QListWidgetItem;
        item->setFlags(Qt::ItemFlag::ItemIsEnabled | Qt::ItemFlag::ItemIsUserCheckable);
        item->setCheckState(Qt::Unchecked);

        item->setText(text);
        m_listWidget->addItem(item);
    }

    //点击表项,自动勾选

    void ComboBoxWidget::slot_itemClicked(QListWidgetItem *item)
    {
        ui->comboBox->blockSignals(true);
        Qt::CheckState state = item->checkState();
        if (state == Qt::Checked)
        {
            state = Qt::Unchecked;
        }
        else
        {
            state = Qt::Checked;
        }
        item->setCheckState(state);
        ui->comboBox->blockSignals(false);

    //更新当前text

    //……
    }

  • 相关阅读:
    C#WPF标记扩展应用实例
    【Vue】动态组件和异步组件
    openstack计算节点的虚机部署安装
    linux下安装openwrt(kvm虚拟机下安装)
    【感恩系列】:说点事儿 以及 我把所有的粉丝放到了中国地图上啦~
    如何选择正确的文档归档解决方案
    迎难而上,做云原生时代的弄潮儿:搞定 Kubernetes
    Swift的可选类型Optional
    Python机器学习013:常用机器学习平台汇总
    ELK 企业级日志分析系统
  • 原文地址:https://blog.csdn.net/DarkSying/article/details/133679134