在看Qt高级编程ch12时,看到绘制QComboBox图标,此处记录下来,以备后续查找或者用到
QComboBox *colorComboBox = new QComboBox;
foreach (const QString &name, QColor::colorNames()) {
QColor color(name);
colorComboBox->addItem(colorSwatch(color), name, color);//(icon, text, QVariant &userData)
}
// 根据颜色绘制不同的icon
// QPixmapCache是pixmap缓存,提升效率,默认缓存10M字节空间,可通过setCacheLimit()修改
QPixmap colorSwatch(const QColor &color, const QSize &size)
{
QString key = QString("COLORSWATCH:%1:%2x%3").arg(color.name()).arg(size.width()).arg(size.height());
QPixmap pixmap(size);
#if QT_VERSION >= 0x040600
if (!QPixmapCache::find(key, &pixmap)) {
#else
if (!QPixmapCache::find(key, pixmap)) {
#endif
pixmap.fill(Qt::transparent);
QPainter painter(&pixmap);
painter.setRenderHints(QPainter::Antialiasing|QPainter::TextAntialiasing);
painter.setPen(Qt::NoPen);
painter.setBrush(color);
painter.drawEllipse(0, 0, size.width(), size.height());
painter.end();
QPixmapCache::insert(key, pixmap);
}
return pixmap;
}
效果图:
改变item:
colorComboBox->setCurrentIndex(colorComboBox->findData(m_brush.color()));
获取值:
m_brush.setColor(colorComboBox->itemData(index).value<QColor>());