Button.h 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. #ifndef BUTTON_H
  2. #define BUTTON_H
  3. #include <QPushButton>
  4. #include <QRadioButton>
  5. #include <QToolButton>
  6. #include <QUrl>
  7. class FluentIconBase;
  8. class PushButton : public QPushButton
  9. {
  10. Q_OBJECT
  11. public:
  12. explicit PushButton(const QString &text, QWidget *parent = nullptr);
  13. explicit PushButton(const QString &text, FluentIconBase *ficon, QWidget *parent = nullptr);
  14. void setIcon(FluentIconBase *ficon);
  15. FluentIconBase *ficon() const;
  16. QIcon icon() const;
  17. virtual void drawIcon(QPainter *painter, const QRect &rect);
  18. protected:
  19. void mousePressEvent(QMouseEvent *event) override;
  20. void mouseReleaseEvent(QMouseEvent *event) override;
  21. void paintEvent(QPaintEvent *event) override;
  22. private:
  23. bool m_isPressed;
  24. QScopedPointer<FluentIconBase> m_ficon;
  25. };
  26. class PrimaryPushButton : public PushButton
  27. {
  28. Q_OBJECT
  29. public:
  30. explicit PrimaryPushButton(const QString &text, QWidget *parent = nullptr);
  31. explicit PrimaryPushButton(const QString &text, FluentIconBase *ficon, QWidget *parent = nullptr);
  32. void drawIcon(QPainter *painter, const QRect &rect) override;
  33. };
  34. class HyperlinkButton : public QPushButton
  35. {
  36. Q_OBJECT
  37. public:
  38. explicit HyperlinkButton(const QString &url, const QString &text, QWidget *parent = nullptr);
  39. private:
  40. QUrl m_url;
  41. };
  42. class RadioButton : public QRadioButton
  43. {
  44. Q_OBJECT
  45. public:
  46. explicit RadioButton(const QString &text, QWidget *parent = nullptr);
  47. };
  48. class ToolButton : public QToolButton
  49. {
  50. Q_OBJECT
  51. public:
  52. explicit ToolButton(FluentIconBase *ficon, QWidget *parent = nullptr);
  53. void setIcon(FluentIconBase *ficon);
  54. FluentIconBase *ficon() const;
  55. // QWidget interface
  56. protected:
  57. void mousePressEvent(QMouseEvent *event) override;
  58. void mouseReleaseEvent(QMouseEvent *event) override;
  59. void paintEvent(QPaintEvent *event) override;
  60. private:
  61. bool m_isPressed;
  62. QScopedPointer<FluentIconBase> m_ficon;
  63. };
  64. class TransparentToolButton : public QToolButton
  65. {
  66. Q_OBJECT
  67. public:
  68. explicit TransparentToolButton(FluentIconBase *ficon, QWidget *parent = nullptr);
  69. // QWidget interface
  70. protected:
  71. void paintEvent(QPaintEvent *event) override;
  72. private:
  73. QScopedPointer<FluentIconBase> m_ficon;
  74. };
  75. #endif // BUTTON_H