自定义组件_滚动横幅&弹窗&对话框&字体图标等
自定义组件_圆弧进度条
自定义组件_水波进度条
自定义组件_多彩仪表盘
自定义组件_通用仪表盘
自定义组件_网格组件(GirdWidget)


仓库

个性
  • 可任意插入、追加 QWidget 类组控件 [举荐QLabel]
  • 可自在拖动子组件,并放弃挪动后所有子组件绝对组件地位不变
  • 可设置子组件大小、子组件行列间距和子组件与父组件边框的间距
  • 可主动依据父组件宽度调整子组件布局
  • 可对父组件治理的子组件进行查找、移除等操作
  • 子组件原性能不受任何影响,可独自配置后联合父组件实现更丰盛的性能
#ifndef GRIDWIDGET_H#define GRIDWIDGET_H#include <QLabel>#include <QMargins>#include <QRect>#include <QVector>/* GridWidget 实现的性能* 1. 可任意插入、追加 QWidget 类组控件 [举荐QLabel]* 2. 可自在拖动子组件,并放弃挪动后所有子绝对组件地位不变* 3. 可设置子组件大小、子组件行列间距和子组件与父组件边框的间距* 4. 可主动依据父组件宽度调整子组件布局* 5. 可对父组件治理的子组件进行查找、移除等操作*//** 阐明:当父组件开始治理子组件时,子组件的生命周期便交由父组件治理,内部不可进行随便 delete 操作*          可应用 removeAt removeOne clear 进行解决* 阐明:子组件原性能不受任何影响,因而可独自配置后联合父组件实现更丰盛的性能*/class GridWidget : public QLabel{   Q_OBJECT   Q_PROPERTY(QMargins margins READ margins WRITE setMargins)   Q_PROPERTY(QSize    size    READ size    WRITE setSize)   Q_PROPERTY(QSize    spacing READ spacing WRITE setSpacing)public:   explicit GridWidget(QWidget *parent = nullptr);   ~GridWidget();   QMargins margins()                                   const;     // 返回子组件与父组件间距   QSize size()                                         const;     // 返回子组件大小   QSize spacing()                                      const;     // 返回子组件间行、列间距   int  count()                                         const;     // 返回以后父组件中子组件的数量   bool contains(QWidget *widget)                       const;     // 返回以后父组件中是否蕴含此组件 (参数:widget 地址)   bool contains(const QString &objectName)             const;     // 返回以后父组件中是否蕴含此组件 (参数:widget objectName)   int indexOf(QWidget* widget, int from = 0)           const;     // 返回值在父组件中第一次呈现的索引地位,从索引地位向前搜寻 (参数:widget 地址)   int indexOf(const QString &objectName, int from = 0) const;     // 返回值在父组件中第一次呈现的索引地位,从索引地位向前搜寻 (参数:widget objectName)   const QWidget *at(int index)                         const;     // 返回父组件中索引地位i处的项public slots:   void append(QWidget* widget);                                    // 将参数组件附加到父组件。   void setSize(QSize size);                                        // 设置子组件大小   void setMargins(QMargins margins);                               // 设置子组件与父组件的边距   void setSpacing(QSize spaceing);                                 // 设置子组件间的行、列间隔   void setRowSpacing(int spaceing);                                // 设置子组件的行间距   void setColumnSpacing(int spaceing);                             // 设置子组件的列间距   void insert(int i, QWidget* widget);                             // 在指定索引处插入参数组件   QWidget *takeAt(int index);                                      // 删除索引地位i处的子组件并返回它   void removeAt(int index);                                        // 移除指定索引处的子组件   bool removeOne(QWidget *widget);                                 // 移除指定索引处的子组件 (参数:widget 地址)   bool removeOne(const QString &objectName);                       // 移除指定索引处的子组件 (参数:widget objectName)   void clear();                                                    // 清空父组件中的所有子组件   void setAnimationEnabled(bool enable);                           // 设置鼠标点击动画使能protected:   bool eventFilter(QObject *object, QEvent *event) override;   void mouseMoveEvent(QMouseEvent *event)          override;   void resizeEvent(QResizeEvent *event)            override;   void rearrangeSubWidget();private:   QMargins          m_margins        = {10, 10, 10, 10};   QSize             m_size           = {60, 60};   QSize             m_spacing        = {10, 10};   QVector<QWidget*> m_vector;   bool m_isAnimation = false;   QPoint m_movePos;   QPoint m_offsetPos;   int m_moveIndex = -1;};#endif // GRIDWIDGET_H