Qt学习-模仿Qt实现一个colorbutton
1、mycolorbutton.h
#include<QToolButton> #include<QtGlobal> #include<QColor> class MyColorButtonPrivate; class MyColorButton : public QToolButton { Q_OBJECT public: MyColorButton(QWidget* parent); ~MyColorButton(); QColor color() const; public slots: void setColor(const QColor& color); signals: void colorChanged(const QColor& color); private: QScopedPointer<MyColorButtonPrivate> d_ptr; Q_DECLARE_PRIVATE(MyColorButton) Q_DISABLE_COPY(MyColorButton) Q_PRIVATE_SLOT(d_func(), void slotEditColor()) };
2、mycolorbutton_p.h
#include "mycolorbutton.h" class MyColorButtonPrivate { public: QColor m_color; void slotEditColor(); MyColorButton* q_ptr; Q_DECLARE_PUBLIC(MyColorButton) };
3、mycolorbutton.cpp
#include <QColorDialog> #include "mycolorbutton_p.h" void MyColorButtonPrivate::slotEditColor() { const QColor newColor = QColorDialog::getColor(m_color, q_ptr, QString(), QColorDialog::ShowAlphaChannel); if(!newColor.isValid() || newColor == q_ptr->color()) return; q_ptr->setColor(newColor); emit q_ptr->colorChanged(m_color); } ///////////////////////////////////////////////////////////////// MyColorButton::MyColorButton(QWidget* parent) :QToolButton(parent), d_ptr(new MyColorButtonPrivate) { d_ptr->q_ptr = this; connect(this, SIGNAL(clicked()), this, SLOT(slotEditColor())); } MyColorButton::~MyColorButton() { } QColor MyColorButton::color() const { return d_ptr->m_color; } void MyColorButton::setColor(const QColor &color) { d_ptr->m_color = color; } #include "moc_mycolorbutton.cpp"