Qt QComBox 隐藏某些选项

QCombox 隐藏下拉框中的某些选项

背景

有些时候QCombox 选项内容都是固定好的,并且有一些业务逻辑和下拉内用的顺序存在一定的瓜葛,这时候由于种种原因需要隐藏一些选项。下面介绍的方法相比较将QCombox中的列表内容清空在重新加进去,方便实用的多。并且显示的项目的索引值不会发生变化,相关的业务逻辑不用更改

实现

    bool disable =true;
    QListView* view = qobject_cast<QListView *>(ui->comboBox->view());
     view->setRowHidden(1,true);

实现的原理是QCombox也是基于Qt 的MVC 模式实现,里面有个QAbstractItemView *view()函数,通过这个函数获取到view 然后进项相关的操作。上面qobject_cast<QListView *> 也可以强转为其他类型的view 然后进行相关的设置也能达到目的。

注意:这里有个bug点,虽然实现了项目的隐藏,但是通过选中QCombox控件,然后滚动鼠标滚轮,仍然能显示隐藏的的项目
解决办法:

  1. 重写QCombox的滚轮事件
void QComboBox::wheelEvent(QWheelEvent *e)
{
//什么也不做
}
  1. 安装事件过滤器

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

bool XXXX::eventFilter(QObject *target, QEvent *event)
{
    //屏蔽鼠标滚轮事件
    if(event->type() == QEvent::Wheel&&(target->inherits("QComboBox")))
    {
    	//什么也不做
        return true;
    }
    return false;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值