ColorComboBox 基于QComboBox的颜色选择下拉框


效果

效果如上

代码示例

ColorComboBox::ColorComboBox(QWidget *parent)
	: QComboBox(parent)
{
    auto listView = static_cast<QListView*>(view());
    listView->setFlow(QListView::LeftToRight);
    listView->setViewMode(QListView::IconMode);
    listView->setSpacing(2);
    listView->setFixedWidth(240);

    for (int i = 0; i < rgbTblSize; ++i) {
        addColor(rgbTbl[i].value);
    }
}

void ColorComboBox::addColor(QColor color)
{
    int index = count();
    QPixmap pix(18, 18);
    pix.fill(color);
    addItem(pix, "", color);
    setItemData(index, QSize(20, 20), Qt::SizeHintRole);
    setItemData(index, color.name(), Qt::ToolTipRole);
}

QColor ColorComboBox::currentColor() const
{
	return currentData(ColorRole).value<QColor>();
}

void ColorComboBox::paintEvent(QPaintEvent* event)
{
    QStylePainter painter(this);
    painter.setPen(palette().color(QPalette::Text));

    // draw the combobox frame, focusrect and selected etc.
    QStyleOptionComboBox opt;
    initStyleOption(&opt);
    painter.drawComplexControl(QStyle::CC_ComboBox, opt);

    // draw color rect
    painter.setPen(Qt::gray);
    painter.setBrush(currentColor());
    painter.drawRect(opt.rect.adjusted(4, 4, -20, -5));
}

总结

1.利用 QListView 的 Flow 和 ViewMode 等定制,实现视图平铺。
2.重新实现 paintEvent 使文本区域变成 颜色块
3.源码下载:https://download.csdn.net/download/boy_fu/86500119

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值