• 9412阅读
  • 4回复

[提问]我的QComboBox里面已经有若干项,如何改变其中某些项的字体颜色? [复制链接]

上一主题 下一主题
离线royt
 

只看楼主 倒序阅读 楼主  发表于: 2011-09-05
比如一个QComboBox,里面已经有三项,text分别是"aaa" "bbb" "ccc",我想将"bbb"这一项disable掉,也就是说点击"bbb"这一项不会做任何改动,那首先将这一项的字体显示成灰色,模拟disable的效果,然后再响应点击事件,如果选中项是灰色字体就不做任何处理。

请问要怎么设置某一项的字体颜色呢,前提是这些项已经加入到了QcomBoBox。另外,拦截点击事情要在什么函数里执行,currentIndexChanged里面可以做吗,还是要installEventFilter 。
离线jdwx

只看该作者 1楼 发表于: 2011-09-05
没发现改QComboBox某行字体颜色的方法,可以改图标,把disabled的图标换了(灰色)。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线royt

只看该作者 2楼 发表于: 2011-09-05
回 1楼(jdwx) 的帖子
http://www.qtcn.org/bbs/read-htm-tid-43784.html
我刚在这个帖子里找到了蛛丝马迹,但是没说明白。
离线royt

只看该作者 3楼 发表于: 2011-09-07
我查了一下资料,新建一个QStandardItemModel对象,将comboBox的每一项文本都插入进来,这样可以disable其中的某一项(QStandardItem有setEnabled方法),然后将整个model赋给comboBox,就可以实现我需要的效果,如下面代码所示。

但是我不想新建一个model,而是直接编辑原有的model,这样在disable某项时,可以保持其他项维持原来的状态。可是comboBox->model()返回的是一个QAbstractItemModel对象,而不是其派生类QStandardItemModel的对象,请问还有何办法?

QStandardItemModel *model = new QStandardItemModel(this);
for (i = 0; i < comboBox->count(); i++)
{
        QStandardItem *item = new QStandardItem(comboBox->itemText(i));
        if (i == itemDisabled)  item->setEnabled(false);
        model->appendRow(item);
}
comboBox->setModel(model);
离线pamire

只看该作者 4楼 发表于: 2016-02-01
看了下QComboBox源代码,它支持QStandardItemModel,通过QStandardItemModel得到Item,再设计其中Item的Foreground,可改变其字体颜色

QStandardItemModel *m = qobject_cast<QStandardItemModel*>(ui->combox->model());
    m->item(index)->setEnabled(false);
    m->setForeground( QBrush(QColor(Qt::red)));
快速回复
限100 字节
 
上一个 下一个