QT学习记录6(QCombobox 下拉列表禁用某个列表项)

本文介绍如何在Qt中通过QComboBox控件禁用特定选项,并提供了实现禁用和解除禁用功能的代码示例。同时,文章还展示了如何通过QSS来改变禁用选项的外观。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目中经常会遇到这样的情况:由于某些情况的限制,下拉框(QCombobox的一些选项不能被选择,但还不能直接删除不写)

如果要实现禁用某些选项,可以这样操作


QModelIndex index = com->model()->index(1, 0);  //第2项
QVariant v(0);

//这里的combox是QCombobox控件的名字
ui->comBox->model()->setData(index, v, Qt::UserRole - 1);

为了能够禁用多个列表项,可以封装一个函数循环一下

2020年1月10日修改: 增加解除禁用功能   具体内容再代码块的注释部分

void MyClass::set_items_disabled(QComboBox *com, int *a, int len)
{
    for(int i=0; i<len; i++)
    {
        QModelIndex index = com->model()->index(a[i], 0);
        QVariant v(0);    //如果要解除,则  QVariant v(-1);
        com->model()->setData(index, v, Qt::UserRole - 1);
        qDebug() << "对项目" << a[i] << "进行非使能操作";
    }
}

这样的话,需要禁用哪些选项,调用函数即可

int a[]={1,2,3,4,6,7,8};
set_items_disabled(com, a, 7);

需要注意的是,这里设置了禁用之后,下拉框被禁用的选项不能选择,点击了,但是颜色和其他项目的颜色是一样的,所以要做一些QSS的操作

使用以下代码即可

ui->mode->setView(new QListView); //设置委托,以应用CSS定制样式

QSS

QComboBox QAbstractItemView::item::!enabled
{
    color:rgb(125,125,125);
}

效果是这样的:只有2个列表项是启用的,其余都被禁用了

这个灰色的下拉框QSS,在上一篇博客中有写到

文中有错误或者意见请帮忙指出,多谢!

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值