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

项目中经常会遇到这样的情况:由于某些情况的限制,下拉框(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,在上一篇博客中有写到

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

  • 9
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值