Qt颜色下拉框
上周为了用Qt写一个类似颜色下拉框的东西,查阅了网上的多数相关资料,依然没有我想要的。终于在周四的时候下定决心重写QCombobox类来实现功能,现在把它贴出来,望看到的人,批评指正。废话不多说,先上图:
图片1-1
点击下拉之后,出现的是下拉表格,里面都是button,我用了最简单的setstylesheet直接设置背景,点击颜色按钮之后,我展示的效果是在编辑框位置有颜色label。因为没有创建这些按钮的索引,所以我是直接简单粗暴的用的按钮的cliced()信号,颜色的话我是重写了QPushButton类,发送的是clicked(QString),将颜色直接传过去的。other按钮是可以弹出QColorDialog,Qt自带的就不多说了。效果如图:
图片1-2
图片1-3
关键代码如下:
- 1 MyCombobox::MyCombobox(QWidget *parent) : QComboBox(parent)
- 2 {
- 3 QTableWidget * tableWidget = new QTableWidget(3, 8);
- 4 tableWidget->verticalHeader()->setVisible(false);
- 5 tableWidget->horizontalHeader()->setVisible(false);
- 6 tableWidget->setShowGrid(false);
- 7 tableWidget->setSpan(2,0,1,8);
- 8 int k = 0;
- 9 for (int i = 0; i < 3; ++i)
- 10 {
- 11 if(i==0||i==1){
- 12 for (int j = 0; j < 8; ++j)
- 13 {
- 14 tableWidget->setColumnWidth(j, 32);
- 15 tableWidget->setRowHeight(j, 24);
- 16 QStringList colorList = QColor::colorNames();\
- 17 MyPushButton * itemWidget = new MyPushButton(colorList[k],this);
- 18 itemWidget->setStyleSheet("QPushButton {">";}");
- 19 k++;
- 20 tableWidget->setCellWidget(i, j, itemWidget);
- 21 connect(itemWidget,SIGNAL(clicked(QString)),this,SLOT(change(QString)));
- 22 }
- 23 }else{
- 24 other =new QPushButton(this);
- 25 other->setText("other");
- 26 tableWidget->setCellWidget(2, 0, other);
- 27 }
- 28 }
- 29 connect(other,SIGNAL(clicked()),this,SLOT(otherColor()));
- 30 this->setModel(tableWidget->model());
- 31 this->setView(tableWidget);
- 32 }
- 33 void MyCombobox::change(QString colorname)
- 34 {
- 35 QLabel *showColor = new QLabel(this);
- 36 showColor->setStyleSheet("QLabel {">";}");
- 37 showColor->setGeometry(5,5,240,20);
- 38 showColor->setVisible(true);
- 39 }
- 40 void MyCombobox::otherColor()
- 41 {
- 42 QColor mycolor = QColorDialog::getColor(Qt::white, this);
- 43 this->change(mycolor.name());
- 44 }
刚接触Qt,写的不好,如果各位有好的想法,我们可以多多沟通,比心