QComboBox 編輯組合框

在編輯QComboBox的時候,看到編輯組合框,看到這種窗口挺好,

想自己試試,一上手才發現自己有多菜

好在最後還是實現了

 

 

#ifndef COMBOBOXEDITDIALOG_H
#define COMBOBOXEDITDIALOG_H

#include <QDialog>
class QToolButton;
class QListWidget;
class QTreeWidget;

class ComboBoxEditDialog : public QDialog
{
    Q_OBJECT
public:
    explicit ComboBoxEditDialog(QWidget *parent = 0);

signals:

public slots:
   void switchState();
private:
    void init();
private:
    QListWidget *m_listWidget;
    QTreeWidget *m_treeWidget;

    QToolButton *m_addBtn;
    QToolButton *m_redBtn;
    QToolButton *m_upBtn;
    QToolButton *m_downBtn;

    QPushButton *m_attriBtn;

    QWidget *rightWidget;
};

#endif // COMBOBOXEDITDIALOG_H


#include "comboboxeditdialog.h"
#include <QtGui>
ComboBoxEditDialog::ComboBoxEditDialog(QWidget *parent) :
    QDialog(parent)
{
    init();

}
void ComboBoxEditDialog::init()
{
    m_listWidget = new QListWidget;
    m_treeWidget = new QTreeWidget;
    m_treeWidget->setColumnCount(2);
    m_treeWidget->setHeaderLabels(QStringList()<<"attribute"<<"value");;

    m_addBtn = new QToolButton();
    m_addBtn->setIcon(QIcon(":/pics/plus-16.png"));
    m_redBtn = new QToolButton();
    m_redBtn->setIcon(QIcon(":/pics/minus-16.png"));
    m_upBtn  = new QToolButton();
    m_upBtn->setIcon(QIcon(":/pics/up.png"));
    m_downBtn= new QToolButton();
    m_downBtn->setIcon(QIcon(":/pics/down.png"));

    m_attriBtn = new QPushButton("屬性<<");
    connect(m_attriBtn,SIGNAL(clicked()),this,SLOT(switchState()));

    QHBoxLayout *btnLayout1 = new QHBoxLayout();
    btnLayout1->addWidget(m_addBtn,-1,Qt::AlignLeft);
    btnLayout1->addWidget(m_redBtn,-1,Qt::AlignLeft);
    btnLayout1->setContentsMargins(0,0,0,0);
    btnLayout1->setSpacing(0);

    btnLayout1->addStretch(10);
    btnLayout1->addWidget(m_upBtn,-1,Qt::AlignHCenter);
    btnLayout1->addWidget(m_downBtn,-1,Qt::AlignHCenter);
    btnLayout1->addStretch(10);
    btnLayout1->addWidget(m_attriBtn,-1,Qt::AlignRight);

    QVBoxLayout *leftUpLayout = new QVBoxLayout();
    leftUpLayout->addWidget(m_listWidget);
    leftUpLayout->addLayout(btnLayout1);
    leftUpLayout->setContentsMargins(0,0,0,0);

    QWidget *leftUpWidget = new QWidget();
    leftUpWidget->setLayout(leftUpLayout);
    leftUpWidget->setContentsMargins(0,0,0,0);


    rightWidget = new QWidget();
    QVBoxLayout *rightLayout = new QVBoxLayout();
    rightLayout->addWidget(m_treeWidget);
    rightLayout->setContentsMargins(0,0,0,0);
    rightLayout->setSpacing(0);
    rightWidget->hide();

    rightWidget->setLayout(rightLayout);

    QSplitter* splitter = new QSplitter(Qt::Horizontal);
    splitter->addWidget(leftUpWidget);
    splitter->addWidget(rightWidget);

    QDialogButtonBox *box =  new QDialogButtonBox();
    box->addButton("確定",QDialogButtonBox::AcceptRole);
    box->addButton("取消",QDialogButtonBox::RejectRole);

    QFrame *lineWidget = new QFrame();
    lineWidget->setFrameShape(QFrame::HLine);
    lineWidget->setFrameShadow(QFrame::Sunken);

    QVBoxLayout *mainLayout = new QVBoxLayout();
    mainLayout->addWidget(splitter);
    mainLayout->addWidget(lineWidget);
    mainLayout->addWidget(box);

    this->setLayout(mainLayout);
    this->resize(500,300);
}

void ComboBoxEditDialog::switchState()
{
    if(rightWidget->isVisible())
    {
        rightWidget->hide();
        m_attriBtn->setText(tr("屬性<<"));
    }else
    {
        rightWidget->show();
        m_attriBtn->setText(tr("屬性>>"));
    }
}

歡迎拍磚
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章