Qt,C++多功能电子印章控件实现

摘要:支持多种自定义功能。包括但不限于支持长度自定义,字体自定义,颜色自定义。老规矩先上图

基于QWidget开发,支持多种形式,根据属性可以实现多种不同类型的电子印章,有关形状枚举参考代码如下

  ///印章形状枚举
  enum LQELECTRONICSEALIDS
  {
    LQESSHAPE_ROUNDE = 0,      //正圆形,例如合同章,公章等
    LQESSHAPE_OVALES,          //椭圆形,例如发票章
    LQESSHAPE_SQUARE,          //正方形,例如法人章
    LQESSHAPE_RECTSR           //长方形,例如财务章
  };

自定义功能可谓是非常全面,有关自定义属性参考代码如下

/// 电子印章控件风格数据结构体
  typedef struct LQELECTRONICSEALINF_{
    QColor                      cBkgColorsValue = Qt::transparent;  //控件背景色
    double                      dBorderSpaceVal = 4.0;                  //边框间距
    QColor                      cOutBorderColor = QColor(251,60,40);    //外边框颜色
    QColor                      cInnBorderColor = QColor(242,42,21);    //内边框颜色
    QColor                      cTextColorValue = QColor(253,28,33);    //印章文本颜色

    double                      dHeightScaleVal = 1.3333;               //椭圆和长方形时宽高比例

    bool                        bHasDrawBkgClrs = false;                //是否绘制背景色
    uint                        uBorderStyleIds = 1;                    //边框风格,0单边框,1双边框
    double                      dOuterBorderWid = 1.0;                  //外边框宽度
    double                      dInnerBorderWid = 0.5;                  //内边框宽度
    double                      dBkgRadiusValue = 0.01;                 //矩形圆角比例

    uint                        uTextMaxLengths = 30;                   //印章正文最大长度
    uint                        uCodeMaxLengths = 30;                   //印章编码最大长度
    bool                        bShowCenterIcon = true;                 //是否显示中间图标
    bool                        bIsShowCodeText = true;                 //是否显示编码
    bool                        bBordersArrange = true;                 //是否沿着边框排列,在圆形或者椭圆时只能以此方式排列
    QFont                       fTextFontObject;                        //正文字体对象
    QFont                       fCodeFontObject;                        //编码字体对象
    uint                        uTextsFontSizes = 9;                    //正文字体大小
    uint                        uCodesFontSizes = 6;                    //编码字体大小
    uint                        uTextPaddingVal = 6;                    //文本边距
    double                      dCenterImgScale = 6.0;                  //控件中央图标大小比例

    double                      dTextFullsAngle = 240.0;                //印章正文角度和
    double                      dTextStartAngle = 120.0;                //印章文本起始角度
    double                      dCodeStartAngle = 15.0;                 //印章编码起始角度
    bool                        bShowSpecialTxt = false;                //是否显示专项内容
    bool                        bShowSpecialNum = false;                //是否显示专项编号。专项编号与中心Logo同时只能显示一个

    int                         nGlobalAngleVal = 0;                    //全局角度
    uint                        uShowFocusLines = 2;                    //是否显示着重线条,0不显示,1单线,2双线

    bool                        bTextsBoldFonts = true;                 //是否强制使用粗体

    LQELECTRONICSEALIDS         eStampShapesIds = LQESSHAPE_ROUNDE;     //印章形状

    bool operator == (const LQELECTRONICSEALINF_& rhs) // == 操作运算符重载
    {
      return  (cBkgColorsValue == rhs.cBkgColorsValue)
          && (DoubleValCompare(dBorderSpaceVal,rhs.dBorderSpaceVal))
          && (cOutBorderColor == rhs.cOutBorderColor)
          && (cInnBorderColor == rhs.cInnBorderColor)
          && (cTextColorValue == rhs.cTextColorValue)
          && (DoubleValCompare(dHeightScaleVal,rhs.dHeightScaleVal))
          && (bHasDrawBkgClrs == rhs.bHasDrawBkgClrs)
          && (uBorderStyleIds == rhs.uBorderStyleIds)
          && (bIsShowCodeText == rhs.bIsShowCodeText)
          && (DoubleValCompare(dOuterBorderWid,rhs.dOuterBorderWid))
          && (DoubleValCompare(dInnerBorderWid,rhs.dInnerBorderWid))
          && (DoubleValCompare(dBkgRadiusValue,rhs.dBkgRadiusValue))
          && (uTextMaxLengths == rhs.uTextMaxLengths)
          && (uCodeMaxLengths == rhs.uCodeMaxLengths)
          && (bShowCenterIcon == rhs.bShowCenterIcon)
          && (bBordersArrange == rhs.bBordersArrange)
          && (uTextsFontSizes == rhs.uTextsFontSizes)
          && (uCodesFontSizes == rhs.uCodesFontSizes)
          && (uTextPaddingVal == rhs.uTextPaddingVal)
          && (DoubleValCompare(dCenterImgScale,rhs.dCenterImgScale))
          && (DoubleValCompare(dTextFullsAngle,rhs.dTextFullsAngle))
          && (DoubleValCompare(dTextStartAngle,rhs.dTextStartAngle))
          && (DoubleValCompare(dCodeStartAngle,rhs.dCodeStartAngle))
          && (bShowSpecialTxt == rhs.bShowSpecialTxt)
          && (eStampShapesIds == rhs.eStampShapesIds)
          && (bShowSpecialNum == rhs.bShowSpecialNum)
          && (nGlobalAngleVal == rhs.nGlobalAngleVal)
          && (uShowFocusLines == rhs.uShowFocusLines)
          && (bTextsBoldFonts == rhs.bTextsBoldFonts);
    }

    bool operator != (const LQELECTRONICSEALINF_& rhs) // != 操作运算符重载
    {
      return !(*this == rhs);
    }
  }LQELECTRONICSEALINF,*PLQELECTRONICSEALINF;

主要绘制定义代码如下

/// 初始化印章控件
    /// \brief InitElectronicSeal
    ///
    virtual void InitElectronicSeal();

  protected:
    ///重写系统绘制事件
    virtual void paintEvent(QPaintEvent *event) override;

    /// 绘制圆形印章
    /// \brief DrawRoundedStamps
    /// \param painter
    ///
    virtual void DrawRoundedStamps(QPainter *painter);

    /// 绘制椭圆形印章
    /// \brief DrawsOvalesStamps
    /// \param painter
    ///
    virtual void DrawsOvalesStamps(QPainter *painter);

    /// 绘制正方形印章
    /// \brief DrawsSquareStamps
    /// \param painter
    ///
    virtual void DrawsSquareStamps(QPainter *painter);

    /// 绘制长方形印章
    /// \brief DrawRectangStamps
    /// \param painter
    ///
    virtual void DrawRectangStamps(QPainter *painter);

    /// 绘制印章图片
    /// \brief DrawElectronicSeal
    ///
    virtual QPixmap DrawElectronicSeal();
  public:
    /// 复制印章图像到 剪贴板
    /// \brief CopyStampImageObj
    ///
    void CopyStampImageObj();

    /// 保存印章图像到文件
    /// \brief SaveStampImageObj
    /// \param uFilePath:文件路径
    /// \param uError   :错误信息
    ///
    bool SaveStampImageObj(std::u16string uFilePath,std::u16string& uError);
  private:
    LQELECTRONICSEALINF tCtrlStylesData;         //控件风格数据结构体
    std::u16string      sTextDataString;         //控件文本数据
    std::u16string      sCodeDataString;         //控件编码数据
    std::u16string      sSpecialTextVal;         //图章专项数据内容
    std::u16string      sSpecialTextNum;         //图章专项编码内容
    std::u16string      sCentersImgPath;         //控件中间图标

太困了,先占个位,有关具体实现事宜,晚点在写。后面可能还会在补几张其它类型印章图片

有关详细信息和技术交流,移步QQ群:717743458。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt是一款广泛应用于跨平台开发的图形用户界面(GUI)框架,而"C"是指其基于C++语言的特性。Qt提供了许多控件用于构建各种类型的应用程序,其中包括了截图控件。 截图控件是指在Qt应用程序中用于截取当前屏幕或指定区域的图像的一种控件。它可以帮助用户快速捕捉屏幕上的内容,并进行保存、编辑或分享。截图控件通常具有以下几个主要功能: 1. 屏幕截取:截图控件可以提供屏幕截取功能,允许用户选择某个窗口、整个屏幕或指定区域进行截图。用户可以通过鼠标拖拽或键盘操作来选择截取区域。 2. 图像编辑:截取的图像可以进行基本的编辑,例如绘制线条、箭头、文字等。这让用户可以添加标记、注释或其他图形元素来强调或说明截图中的某些内容。 3. 图像保存和分享:截图控件可以提供图像保存和分享的功能。用户可以选择将截图保存为本地文件,并可以选择保存的格式(如PNG、JPEG等)。此外,截图控件还可以提供分享功能,允许用户通过邮件、社交媒体或其他渠道分享截图。 在Qt中,实现截图控件可以使用Qt的图形类库和事件驱动机制来实现。可以通过监听鼠标事件来获取用户选择的截取区域,然后通过Qt提供的图形绘制功能绘制所选择区域的图像。最后,可以使用Qt提供的图像保存功能将截图保存到本地文件或进行分享。 总之,Qt的截图控件为用户提供了方便快捷的截屏和编辑功能,能够显著提升用户在应用程序中处理图像的效率和便利性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值