QComboBox 编辑组合框

来源:互联网 发布:iphone 5s电池淘宝威锋 编辑:程序博客网 时间:2024/06/06 04:55

在编辑QComboBox的时候,看到编辑组合框,看到这种窗口挺好,

想自己试试,一上手才发现自己有多菜

好在最后还是实现了

 

 

[cpp] view plaincopy
  1. #ifndef COMBOBOXEDITDIALOG_H  
  2. #define COMBOBOXEDITDIALOG_H  
  3.   
  4. #include <QDialog>  
  5. class QToolButton;  
  6. class QListWidget;  
  7. class QTreeWidget;  
  8.   
  9. class ComboBoxEditDialog : public QDialog  
  10. {  
  11.     Q_OBJECT  
  12. public:  
  13.     explicit ComboBoxEditDialog(QWidget *parent = 0);  
  14.   
  15. signals:  
  16.   
  17. public slots:  
  18.    void switchState();  
  19. private:  
  20.     void init();  
  21. private:  
  22.     QListWidget *m_listWidget;  
  23.     QTreeWidget *m_treeWidget;  
  24.   
  25.     QToolButton *m_addBtn;  
  26.     QToolButton *m_redBtn;  
  27.     QToolButton *m_upBtn;  
  28.     QToolButton *m_downBtn;  
  29.   
  30.     QPushButton *m_attriBtn;  
  31.   
  32.     QWidget *rightWidget;  
  33. };  
  34.   
  35. #endif // COMBOBOXEDITDIALOG_H  


[cpp] view plaincopy
  1. #include "comboboxeditdialog.h"  
  2. #include <QtGui>  
  3. ComboBoxEditDialog::ComboBoxEditDialog(QWidget *parent) :  
  4.     QDialog(parent)  
  5. {  
  6.     init();  
  7.   
  8. }  
  9. void ComboBoxEditDialog::init()  
  10. {  
  11.     m_listWidget = new QListWidget;  
  12.     m_treeWidget = new QTreeWidget;  
  13.     m_treeWidget->setColumnCount(2);  
  14.     m_treeWidget->setHeaderLabels(QStringList()<<"attribute"<<"value");;  
  15.   
  16.     m_addBtn = new QToolButton();  
  17.     m_addBtn->setIcon(QIcon(":/pics/plus-16.png"));  
  18.     m_redBtn = new QToolButton();  
  19.     m_redBtn->setIcon(QIcon(":/pics/minus-16.png"));  
  20.     m_upBtn  = new QToolButton();  
  21.     m_upBtn->setIcon(QIcon(":/pics/up.png"));  
  22.     m_downBtn= new QToolButton();  
  23.     m_downBtn->setIcon(QIcon(":/pics/down.png"));  
  24.   
  25.     m_attriBtn = new QPushButton("属性<<");  
  26.     connect(m_attriBtn,SIGNAL(clicked()),this,SLOT(switchState()));  
  27.   
  28.     QHBoxLayout *btnLayout1 = new QHBoxLayout();  
  29.     btnLayout1->addWidget(m_addBtn,-1,Qt::AlignLeft);  
  30.     btnLayout1->addWidget(m_redBtn,-1,Qt::AlignLeft);  
  31.     btnLayout1->setContentsMargins(0,0,0,0);  
  32.     btnLayout1->setSpacing(0);  
  33.   
  34.     btnLayout1->addStretch(10);  
  35.     btnLayout1->addWidget(m_upBtn,-1,Qt::AlignHCenter);  
  36.     btnLayout1->addWidget(m_downBtn,-1,Qt::AlignHCenter);  
  37.     btnLayout1->addStretch(10);  
  38.     btnLayout1->addWidget(m_attriBtn,-1,Qt::AlignRight);  
  39.   
  40.     QVBoxLayout *leftUpLayout = new QVBoxLayout();  
  41.     leftUpLayout->addWidget(m_listWidget);  
  42.     leftUpLayout->addLayout(btnLayout1);  
  43.     leftUpLayout->setContentsMargins(0,0,0,0);  
  44.   
  45.     QWidget *leftUpWidget = new QWidget();  
  46.     leftUpWidget->setLayout(leftUpLayout);  
  47.     leftUpWidget->setContentsMargins(0,0,0,0);  
  48.   
  49.   
  50.     rightWidget = new QWidget();  
  51.     QVBoxLayout *rightLayout = new QVBoxLayout();  
  52.     rightLayout->addWidget(m_treeWidget);  
  53.     rightLayout->setContentsMargins(0,0,0,0);  
  54.     rightLayout->setSpacing(0);  
  55.     rightWidget->hide();  
  56.   
  57.     rightWidget->setLayout(rightLayout);  
  58.   
  59.     QSplitter* splitter = new QSplitter(Qt::Horizontal);  
  60.     splitter->addWidget(leftUpWidget);  
  61.     splitter->addWidget(rightWidget);  
  62.   
  63.     QDialogButtonBox *box =  new QDialogButtonBox();  
  64.     box->addButton("确定",QDialogButtonBox::AcceptRole);  
  65.     box->addButton("取消",QDialogButtonBox::RejectRole);  
  66.   
  67.     QFrame *lineWidget = new QFrame();  
  68.     lineWidget->setFrameShape(QFrame::HLine);  
  69.     lineWidget->setFrameShadow(QFrame::Sunken);  
  70.   
  71.     QVBoxLayout *mainLayout = new QVBoxLayout();  
  72.     mainLayout->addWidget(splitter);  
  73.     mainLayout->addWidget(lineWidget);  
  74.     mainLayout->addWidget(box);  
  75.   
  76.     this->setLayout(mainLayout);  
  77.     this->resize(500,300);  
  78. }  
  79.   
  80. void ComboBoxEditDialog::switchState()  
  81. {  
  82.     if(rightWidget->isVisible())  
  83.     {  
  84.         rightWidget->hide();  
  85.         m_attriBtn->setText(tr("属性<<"));  
  86.     }else  
  87.     {  
  88.         rightWidget->show();  
  89.         m_attriBtn->setText(tr("属性>>"));  
  90.     }  
  91. }  
0 0
原创粉丝点击