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::SizeHintRole13Qt::InitialSortOrderRole14设置初始排序Qt::DisplayPropertyRole27显示属性Qt::DecorationPropertyRole28装饰属性Qt:: ToolTipPropertyRole29工具提示Qt:: StatusTipPropertyRole30tip 属性Qt:: WhatsThisPropertyRole31whatisthisQt:: 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);
版权归原作者 南国红枫叶 所有, 如有侵权,请联系我们删除。