好久没有使用Qt了,最近在做窗体时做了一个自定义的钮铵,刚开始是想通过修改其MASK和ICON的
方式来实现。确发现效果总是不太如意,如是干脆自已定义了一个XPushButton。也将其实现方式记录发
布出来。以方便日后自已使用和给有相应问题的朋友一个小小的提示。
    为了实现任意形状的窗体和保留QPushButton的特性,继承QPushButton创建一个子类。

class QtXPushButton : public QPushButton
{
    Q_OBJECT

public:
    QtXPushButton(QString strImagePath, QWidget *parent = NULL);
    ~QtXPushButton();
}

    为了方便描述按钮正常、鼠标滑动、选取状态、禁止点击状态定义一个状态枚举。

//按钮状态
enum XBUTTONSTATE
{
    NORMAL = 0X01,//正常状态
    HOVER = 0X02,//鼠标滑过状态
    SELECTED = 0X04,//选中状态
    DISABLE = 0X08//禁止点击状态
};


为了方便设置个程状态的图标,添加状态图标设置接口,并设置一个标识表明设置了哪些状态。

//设置正常图标
void SetNormalPixmap(QString strImagePath);
//设置鼠标滑动图片
void SetHoverPixmap(QString strImagePath);
//设置选中状态图片
void SetSelectedPixmap(QString strImagePath);
//设置禁止点击图标
void SetDisablePixmap(QString strImagePath);
//设置按钮当前状态

void SetBtnState(XBUTTONSTATE state);
//设置图片大小
 void SetSize(QSize sz);


    至此一个具有设置正常、鼠标滑动、选中、禁止点击功能的按钮的接口就定义好了。这个子类的最终定义如下。

#pragma once

#include <QPushButton>
#include <QString>
#include <QWidget>
#include <QPixmap>

//按钮状态
enum XBUTTONSTATE
{
    NORMAL = 0X01,//正常状态
    HOVER = 0X02,//鼠标滑过状态
    SELECTED = 0X04,//选中状态
    DISABLE = 0X08//禁止点击状态
};

class QtXPushButton : public QPushButton
{
    Q_OBJECT

public:
    QtXPushButton(QString strImagePath, QWidget *parent = NULL);
    ~QtXPushButton();