Qt QComboBox为每个项目提供不同的背景颜色?

时间:2010-10-21 07:24:32

标签: c++ qt qt4

有没有办法为QComboBox中的每个项目设置不同的背景颜色?

1 个答案:

答案 0 :(得分:4)

我想这样做的唯一方法就是编写自己的模型,继承QAbstractListModel,重新实现rowCount()data(),您可以在其中设置每个项目的背景颜色(使用BackgroundRole角色。

然后,使用QComboBox::setModel()使QComboBox显示它。

这是一个简单的例子,我创建了自己的列表模型,继承了QAbstractListModel

class ItemList : public QAbstractListModel
{
   Q_OBJECT
public:
   ItemList(QObject *parent = 0) : QAbstractListModel(parent) {}

   int rowCount(const QModelIndex &parent = QModelIndex()) const { return 5; }
   QVariant data(const QModelIndex &index, int role) const {
      if (!index.isValid())
          return QVariant();

      if (role == Qt::BackgroundRole)
         return QColor(QColor::colorNames().at(index.row()));

      if (role == Qt::DisplayRole)
          return QString("Item %1").arg(index.row() + 1);
      else
          return QVariant();
   }
};

现在可以很容易地将此​​模型与组合框一起使用:

comboBox->setModel(new ItemList);