Qt cpp QComboBox deleget显示颜色色块。选中后返回rgb颜色
时间: 2024-02-27 17:53:15 浏览: 72
显示颜色的ComboBox
4星 · 用户满意度95%
可以通过QStyledItemDelegate来实现在QComboBox中显示颜色色块,同时可以通过QComboBox的currentData方法获取选中的颜色值。具体方法如下:
1. 自定义一个QStyledItemDelegate的子类ColorDelegate,重写其paint方法,在绘制选项时添加颜色色块。
2. 在QComboBox中设置该delegate。
3. 在QComboBox中添加选项,并将颜色值设置为选项的数据。
4. 通过QComboBox的currentData方法获取选中的颜色值。
下面是示例代码:
```cpp
// 自定义一个QStyledItemDelegate的子类ColorDelegate
class ColorDelegate : public QStyledItemDelegate
{
public:
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override
{
if (index.column() == 0) {
QColor color = QColor(index.data(Qt::UserRole).toInt());
QRect rect = option.rect.adjusted(2, 2, -2, -2);
painter->fillRect(rect, color);
painter->drawRect(rect);
} else {
QStyledItemDelegate::paint(painter, option, index);
}
}
};
// 设置QComboBox的delegate
comboBox->setItemDelegate(new ColorDelegate(comboBox));
// 添加选项,并设置颜色值为选项的数据
comboBox->addItem("Red", QColor(Qt::red).rgb());
comboBox->addItem("Green", QColor(Qt::green).rgb());
comboBox->addItem("Blue", QColor(Qt::blue).rgb());
// 获取选中的颜色值
int index = comboBox->currentIndex();
QColor color = QColor(comboBox->currentData(Qt::UserRole).toInt());
```
这样,在QComboBox中就可以显示出颜色色块,并且可以通过选中的选项获取对应的rgb颜色。
阅读全文