如前所述,自定义外观的第三种方法是子类化窗口部件类。子类化窗口类适用于能够经常使用的,具有鲜明特性的部件。子类化窗口类更多的适用于定制功能而非外观。
子类化窗口部件类的过程就是重新实现事件处理函数的过程。
下面是自定义圆形按钮类:
class RoundButton : public QPushButton
{
Q_OBJECT
public:
RoundButton(QWidget * parent = 0);
RoundButton(const QString & text, QWidget * parent = 0);
RoundButton(const QIcon & icon,const QString & text ,QWidget * parent = 0);
virtual ~RoundButton();
QSize sizeHint();
QSize minimumSize();
void setColor(QColor color) { m_color = color; }
void setHighlight(QColor highlight) { m_highlight = highlight; }
void setShadow(QColor shadow) { m_shadow = shadow; }
//Range: 0.0 [invisible] - 1.0 [opaque]
void setOpacity(qreal opacity) { m_opacity = opacity; }
//Range: 0 [rectangle] - 99 [oval]
void setRoundness(int roundness) { m_roundness = roundness; }
protected:
void paintEvent(QPaintEvent * pe);
//void drawButton(QPainter* pe);
void enterEvent(QEvent * e);
void leaveEvent(QEvent * e);
void mousePressEvent(QMouseEvent * e);
void mouseReleaseEvent(QMouseEvent * e);
private:
QRect calculateIconPosition(QRect button_rect, QSize icon_size);
void adjustGeometry();
private:
bool m_hovered;
bool m_pressed;
QColor m_color;
QColo