代码中要实现一个颜色选择的下拉框,从Qt的例子中找到一个。记录下来。
这段代码的核心是,正如在Model/View中提到的,QCombox等内部都使用了Model。这是一个例子。看到这个例子,可以对Model/View有了更深刻的理解。

定义一个颜色选择的ComboBox

来自Qt的例子程序 coloreditorfactory的一部分, 演示如何创建一个选择颜色的下拉框. 它产生一个使用颜色名的下拉框, 并且使用对应的颜色作为每一项的背景色.

QComboBox后台使用了Model, 因此, 我们设置其Qt::DecorationRole来产生颜色效果.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
class ColorListEditor : public QComboBox
{
Q_OBJECT
public:
ColorListEditor(QWidget *widget=nullptr);
QColor color() const;
void setColor(const QColor& color);

private:
void populateList();
};

ColorListEditor::ColorListEditor(QWidget *widget)
: QComboBox(widget)
{
populateList();
}

QColor ColorListEditor::color() const
{
return qvariant_cast<QColor>(itemData(currentIndex(), Qt::DecorationRole));
}

void ColorListEditor::setColor(const QColor &color)
{
setCurrentIndex(findData(color, Qt::DecorationRole));
}

void ColorListEditor::populateList()
{
const auto names = QColor::colorNames();
for(int i=0; i<names.size(); ++i)
{
QColor color(names.at(i));
insertItem(i, names.at(i));
setItemData(i, color, Qt::DecorationRole);
}
}