项目中经常会遇到这样的情况:由于某些情况的限制,下拉框(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,在上一篇博客中有写到
文中有错误或者意见请帮忙指出,多谢!