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,写的不好,如果各位有好的想法,我们可以多多沟通,比心


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM