1、概述
源码放在文章末尾
该项目实现了高亮发光按钮控件
- 可设置文本,居中显示。
- 可设置文本颜色。
- 可设置外边框渐变颜色。
- 可设置里边框渐变颜色。
- 可设置背景色。
- 可直接调用内置的设置 绿色、红色、黄色、黑色、蓝色 等公有槽函数。
- 可设置是否在容器中可移动,当成一个对象使用。
- 可设置是否显示矩形。
- 可设置报警颜色、非报警颜色。
- 可控制启动报警和停止报警,报警时闪烁。
下面是demo演示:
项目部分代码如下:
#ifndef LIGHTBUTTON_H
#define LIGHTBUTTON_H/*** 高亮发光按钮控件 * 1. 可设置文本,居中显示。* 2. 可设置文本颜色。* 3. 可设置外边框渐变颜色。* 4. 可设置里边框渐变颜色。* 5. 可设置背景色。* 6. 可直接调用内置的设置 绿色、红色、黄色、黑色、蓝色 等公有槽函数。* 7. 可设置是否在容器中可移动,当成一个对象使用。* 8. 可设置是否显示矩形。* 9. 可设置报警颜色、非报警颜色。* 10. 可控制启动报警和停止报警,报警时闪烁。*/#include <QWidget>#ifdef quc
class Q_DECL_EXPORT LightButton : public QWidget
#else
class LightButton : public QWidget
#endif{Q_OBJECTQ_PROPERTY(QString text READ getText WRITE setText)Q_PROPERTY(QColor textColor READ getTextColor WRITE setTextColor)Q_PROPERTY(QColor alarmColor READ getAlarmColor WRITE setAlarmColor)Q_PROPERTY(QColor normalColor READ getNormalColor WRITE setNormalColor)Q_PROPERTY(QColor borderOutColorStart READ getBorderOutColorStart WRITE setBorderOutColorStart)Q_PROPERTY(QColor borderOutColorEnd READ getBorderOutColorEnd WRITE setBorderOutColorEnd)Q_PROPERTY(QColor borderInColorStart READ getBorderInColorStart WRITE setBorderInColorStart)Q_PROPERTY(QColor borderInColorEnd READ getBorderInColorEnd WRITE setBorderInColorEnd)Q_PROPERTY(QColor bgColor READ getBgColor WRITE setBgColor)Q_PROPERTY(bool canMove READ getCanMove WRITE setCanMove)Q_PROPERTY(bool showRect READ getShowRect WRITE setShowRect)Q_PROPERTY(bool showOverlay READ getShowOverlay WRITE setShowOverlay)Q_PROPERTY(QColor overlayColor READ getOverlayColor WRITE setOverlayColor)public:explicit LightButton(QWidget *parent = 0);protected:bool eventFilter(QObject *watched, QEvent *event);void paintEvent(QPaintEvent *);void drawBorderOut(QPainter *painter);void drawBorderIn(QPainter *painter);void drawBg(QPainter *painter);void drawText(QPainter *painter);void drawOverlay(QPainter *painter);private:QString text; //文本QColor textColor; //文字颜色QColor alarmColor; //报警颜色QColor normalColor; //正常颜色QColor borderOutColorStart; //外边框渐变开始颜色QColor borderOutColorEnd; //外边框渐变结束颜色QColor borderInColorStart; //里边框渐变开始颜色QColor borderInColorEnd; //里边框渐变结束颜色QColor bgColor; //背景颜色bool showRect; //显示成矩形bool canMove; //是否能够移动bool showOverlay; //是否显示遮罩层QColor overlayColor; //遮罩层颜色bool pressed; //鼠标是否按下QPoint lastPoint; //鼠标最后按下坐标bool isAlarm; //是否报警QTimer *timerAlarm; //定时器切换颜色public://默认尺寸和最小尺寸QSize sizeHint() const;QSize minimumSizeHint() const;//获取和设置文本QString getText() const;void setText(const QString &text);//获取和设置文本颜色QColor getTextColor() const;void setTextColor(const QColor &textColor);//获取和设置报警颜色QColor getAlarmColor() const;void setAlarmColor(const QColor &alarmColor);//获取和设置正常颜色QColor getNormalColor() const;void setNormalColor(const QColor &normalColor);//获取和设置外边框渐变颜色QColor getBorderOutColorStart() const;void setBorderOutColorStart(const QColor &borderOutColorStart);QColor getBorderOutColorEnd() const;void setBorderOutColorEnd(const QColor &borderOutColorEnd);//获取和设置里边框渐变颜色QColor getBorderInColorStart() const;void setBorderInColorStart(const QColor &borderInColorStart);QColor getBorderInColorEnd() const;void setBorderInColorEnd(const QColor &borderInColorEnd);//获取和设置背景色QColor getBgColor() const;void setBgColor(const QColor &bgColor);//获取和设置是否可移动bool getCanMove() const;void setCanMove(bool canMove);//获取和设置是否显示矩形bool getShowRect() const;void setShowRect(bool showRect);//获取和设置是否显示遮罩层bool getShowOverlay() const;void setShowOverlay(bool showOverlay);//获取和设置遮罩层颜色QColor getOverlayColor() const;void setOverlayColor(const QColor &overlayColor);public Q_SLOTS://设置为绿色void setGreen();//设置为红色void setRed();//设置为黄色void setYellow();//设置为黑色void setBlack();//设置为灰色void setGray();//设置为蓝色void setBlue();//设置为淡蓝色void setLightBlue();//设置为淡红色void setLightRed();//设置为淡绿色void setLightGreen();//设置报警闪烁void startAlarm();void stopAlarm();void alarm();Q_SIGNALS://单击信号void clicked();
};#endif // LIGHTBUTTON_H