Qt中QComboBox实现下拉复选框

11 篇文章 4 订阅
void MainWindow::init
{
    m_workshopListWidget = new QListWidget(this);
    m_workshopListWidget->setObjectName(QString("listWidget_wkshop"));

    for(int i=0; i< m_workshopList.length(); i++)
    {
        QListWidgetItem *item = new QListWidgetItem();
        m_workshopListWidget->addItem(item);
        QCheckBox *chkBox = new QCheckBox();
        chkBox->setText(m_workshopList.at(i));

        m_workshopListWidget->setItemWidget(item, chkBox);
        connect(chkBox,SIGNAL(stateChanged(int)),this,SLOT(slot_stateChanged()));
    }
    ui->cmbBox_workshop->setModel(m_workshopListWidget->model());
    ui->cmbBox_workshop->setView(m_workshopListWidget);
    ui->cmbBox_workshop->setEditable(true);
    QLineEdit* lineEdit = ui->cmbBox_workshop->lineEdit();
    lineEdit->setObjectName("LineEdit");
    lineEdit->setText(QStringLiteral("选择车间"));
    if(lineEdit)
    {
        lineEdit->setReadOnly(true);
    }
}

slot_stateChanged()实现过程
void MainWindow::slot_stateChanged()
{
    QString str ;
    for ( int i= 0 ; i<m_workshopListWidget->count() ; i++ )
    {
        QListWidgetItem *item = m_workshopListWidget->item(i);
        QCheckBox *box = (QCheckBox*)m_workshopListWidget->itemWidget(item);
        if ( box->checkState() == Qt::Checked )
        {
            str += box->text();
            str += ",";
        }
    }
    str = str.mid(0,str.size()-1);
    if(str == QString(""))
    {
        str = QStringLiteral("选择车间");
    }
    ui->cmbBox_workshop->lineEdit()->setText(str);
}

注意同一个QComboBox对象的setModel()和SetView()只能调用一次,如果下拉列表数据有变动时,修改QListWidgetItem,而不能重新setModel()和SetView()。另外实验中发现下拉列表容易重复点击后容易出现错乱和空白条目,不知道是为什么,也可能是使用QListWidgetItem的问题吧

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值