标题:我的QComboBox里面已经有若干项,如何改变其中某些项的字体颜色?
作者:royt
日期:2011-09-05 09:53
内容:
比如一个QComboBox,里面已经有三项,text分别是"aaa" "bbb" "ccc",我想将"bbb"这一项disable掉,也就是说点击"bbb"这一项不会做任何改动,那首先将这一项的字体显示成灰色,模拟disable的效果,然后再响应点击事件,如果选中项是灰色字体就不做任何处理。
请问要怎么设置某一项的字体颜色呢,前提是这些项已经加入到了QcomBoBox。另外,拦截点击事情要在什么函数里执行,currentIndexChanged里面可以做吗,还是要installEventFilter 。
#1 [jdwx 09-05 10:44]
没发现改QComboBox某行字体颜色的方法,可以改图标,把disabled的图标换了(灰色)。
#2 回 1楼(jdwx) 的帖子 [royt 09-05 13:04]
http://www.qtcn.org/bbs/read-htm-tid-43784.html
我刚在这个帖子里找到了蛛丝马迹,但是没说明白。
#3 [royt 09-07 11:29]
我查了一下资料,新建一个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);
#4 [pamire 02-01 14:18]
看了下QComboBox源代码,它支持QStandardItemModel,通过QStandardItemModel得到Item,再设计其中Item的Foreground,可改变其字体颜色
QStandardItemModel *m = qobject_cast(ui->combox->model());
m->item(index)->setEnabled(false);
m->setForeground( QBrush(QColor(Qt::red)));