代码中要实现一个颜色选择的下拉框,从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); } }
|