idropshadowable.h 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. #ifndef IDROPSHADOWABLE_H
  2. #define IDROPSHADOWABLE_H
  3. #include <QList>
  4. #include <QSize>
  5. #include <QColor>
  6. #include <QWidget>
  7. #include <QDebug>
  8. struct BoxShadow
  9. {
  10. int x;
  11. int y;
  12. int radius;
  13. int spread;
  14. QColor color;
  15. QSize boxSize;
  16. QImage image;
  17. //BoxShadow():x(0),y(0),radius(0),spread(0),color(QColor()),boxSize(QSize()){}
  18. bool operator==(const BoxShadow &rhs) const
  19. {
  20. return (this->radius == rhs.radius)
  21. &&(this->spread == rhs.spread)
  22. &&(this->color == rhs.color)
  23. &&(this->boxSize == rhs.boxSize);
  24. }
  25. bool operator<(const BoxShadow &rhs) const
  26. {
  27. /*----------------------------------------------------------------
  28. * QMap中通过<运算符来比较两个参数是否相等
  29. * 即通过a<b来判断是否相等,若小于成立,则说明不相等,便会插入;
  30. * 若小于不成立,则说明要么大于,要么等于;
  31. * 然后再反过来比较一次,即b<a,若这次小于成立,则b>a,则说明它们不相等,便会插入,否则相等。
  32. ----------------------------------------------------------------*/
  33. if((this->radius == rhs.radius)
  34. &&(this->spread == rhs.spread)
  35. &&(this->color == rhs.color)
  36. &&(this->boxSize == rhs.boxSize))
  37. {
  38. return false;
  39. }
  40. else
  41. {
  42. return true;
  43. }
  44. //return this->radius < rhs.radius;
  45. }
  46. friend QDebug operator<<(QDebug debug, const BoxShadow &boxShadow)
  47. {
  48. // QString info = QString("[x: %1][y: %2][radius: %3][spread: %4][size: (%5,%6)]")
  49. // .arg(boxShadow.x).arg(boxShadow.y).arg(boxShadow.radius).arg(boxShadow.spread)
  50. // .arg(boxShadow.boxSize.width()).arg(boxShadow.boxSize.height());
  51. debug << QString("(%1,%2)").arg(boxShadow.x).arg(boxShadow.y)
  52. <<boxShadow.color<<boxShadow.radius<<boxShadow.spread<<boxShadow.boxSize;
  53. return debug;
  54. }
  55. };
  56. Q_DECLARE_METATYPE(BoxShadow);
  57. class IDropShadowable
  58. {
  59. public:
  60. IDropShadowable(){}
  61. IDropShadowable(QWidget *selfWidget);
  62. protected:
  63. void SetDropShadow(const BoxShadow &boxShadow, const QSize &size);
  64. void SetDropShadows(const QList<BoxShadow> &shadows, const QSize &size);
  65. void ClearDropShadow();
  66. private:
  67. QWidget *m_pSelfWidget;
  68. QList<BoxShadow> m_listShadows;
  69. public:
  70. void PaintShadows();
  71. };
  72. #endif // IDROPSHADOWABLE_H