QT QCombox 选项不可选 置灰

QT QCombox 选项不可选 置灰

前言

QCombox 做一个下拉框,下拉框中的某些选项置为不可选状态

一、实现方法一

通过设置数据的 role 来实现。通过[virtual] bool QAbstractItemModel::setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) 函数将数据的角色设置成特定的。

    QModelIndex index = ui->comboBox->model()->index(1,0);
    QVariant v(0);
   ui->comboBox->model()->setData(index, v, Qt::UserRole - 1);

通过更改v 的值可以控制当前 index是否选中。V>0 可选。
ItemDataRole 是标识数据的角色,具体详细的可见qt 的官方文档,常用的枚举值大概有以下:

角色描述
Qt::DisplayRole0显示
Qt::DecorationRole1装饰
Qt::EditRole2编辑
Qt::ToolTipRole3工具提示
Qt::StatusTipRole4状态栏
Qt::WhatsThisRole5在“What’s This?”模式下显示的数据。
Qt::FontRole6字体
Qt::TextAlignmentRole7项目的文本对齐。
Qt::BackgroundRole8背景画笔
ForegroundRole9前景色刷
Qt::CheckStateRole10此角色用于获取项的选中状态
Qt::AccessibleTextRole11可访问性扩展和插件(如屏幕阅读器)所使用的文本
Qt::AccessibleDescriptionRole12用于可访问性目的的项目描述
Qt::SizeHintRole13
Qt::InitialSortOrderRole14设置初始排序
Qt::DisplayPropertyRole27显示属性
Qt::DecorationPropertyRole28装饰属性
Qt:: ToolTipPropertyRole29工具提示
Qt:: StatusTipPropertyRole30tip 属性
Qt:: WhatsThisPropertyRole31whatisthis
Qt:: UserRole0x0100对于用户角色,由开发人员决定使用哪种类型

通过设置不同的角色,得到想要的显示效果。
例如:

// index项 设置背景
ui->combox->setItemData(index, QBrush(QColor(255,100,200)), Qt::BackgroundRole);
// index项 设置字体
ui->combox->setItemData(index, QBrush(QColor(Qt::red)), Qt::ForegroundRole);

二、实现方法二

通过QCombox 组件中的QAbstractItemModel *model() const 拿到QCombox的模型,然后强转成
QStandardItemModel,然后通过行号获取到QStandardItem,设置QStandardItem的flags。

bool en=true;
auto model =qobject_cast<QStandardItemModel *>(ui->comboBox->model());
QStandardItem* item = model->item(2);
item->setFlags(en? item->flags() & ~(Qt::ItemIsSelectable|Qt::ItemIsEnabled): 
Qt::ItemIsSelectable|Qt::ItemIsEnabled);
// visually disable by greying out - works only if combobox has been painted already and palette returns the wanted color
item->setData(en? ui->comboBox->palette().color(QPalette::Disabled, QPalette::Text): 
QVariant(),Qt::TextColorRole);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值