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。
Qt,C++多功能电子印章控件实现相关推荐
- VS+QT开发Ocx/ActiveX控件 一
VS+QT开发Ocx/ActiveX控件 一 VS+QT开发Ocx/ActiveX控件-------网页中全屏 二 QT开发ActiveX控件 一:所用IDE版本,需用管理员权限 二:创建Active ...
- Qt开发Activex笔记(二):Qt调用Qt开发的Activex控件
若该文为原创文章,转载请注明原文出处 本文章博客地址:https://blog.csdn.net/qq21497936/article/details/113789693 长期持续带来更多项目与技术分 ...
- QT QSpinBox 整数计数器控件 使用详解
本文详细的介绍了QSpinBox控件的各种操作,例如:获取数值.设置前后缀.设置最大/小值.进制转换.关联信号槽.优化信号.QSS优化.文件源码.样式表 .效果:可以设置背景.边框.向上按钮.向下按钮 ...
- QT自定义控件之倒计时控件
文章目录 1 效果预览 2 加载背景图片 3 尺子可拉动头部的实现 4 整个尺子部分的实现 5 表盘的实现 6 主界面代码实现 1 效果预览 我们首先来看下实现的效果: 右边的表带拉动会使左边的表盘跟 ...
- 【Qt开发】常用控件--QLineEdit
QLineEdit是单行文本编辑控件.比如用户名,密码等输入框可以使用该控件. 所属头文件<QLineEdit> 常用方法 1.void setText(const QString &am ...
- Qt修炼手册10_QTableWidget控件使用说明及实践
1.QTableWidget类简介 QTableWidget是QT对话框设计中常用的显示数据表格的控件. QTableWidget继承于类QTableView,所以在学习QTableWidget之前可 ...
- Qt QWidget实现开关控件SwithButton(SlipButton)
前言 Qt做界面的时候常常会用到开关控件,类似于CheckButton有两种状态,只是界面表现形式不一样而已.本文通过QWidget类来实现一个开关控件SwitchBtn(有些平台上又称为SlipBu ...
- QT tableview内置控件
为什么需要内置控件 tableview 默认的内置控件是QLineEdit,但是实际使用时,我们常常会有特殊需求,例如对QLineEdit有字数限制,性别有固定的选项等等,因此我们需要自定义table ...
- Qt笔记 之 QListWidget控件的使用
Qt提供QListWidget类列表框控件用来加载并显示多个列表项.QListWidgetItem类就是列表项类.一般列表框控件中的列表项有两种加载方式: 一种是由用户手动添加的列表项,比如音乐播放器 ...
最新文章
- 090620 刚才修复一个fat32分区的经历
- 学术不端网查重靠谱吗_毕业论文查重把知网上的英文文章翻译成中文可以吗
- C#中HttpClient使用注意:预热与长连接
- 一些我工作中经常使用的ABAP新语法和函数,关键字,可以提高工作效率
- 汇编-函数调用的理解
- centos yum安装_centos7上yum安装碰到的坑
- 电子计算机职专东校区在哪,自贡计算机电子信息职业技术学校位置在哪儿
- 天上友嘉不用c语言吗,【天上友嘉怎么样?】-看准网
- 软件测试—软件测试基础知识—测试用例设计的方法判定表和因果图
- NLP 自然语言分析理解
- 20款优秀的可以替代桌面软件的Web应用(转载自JavaEye)
- 分析 : BSOD案例 2013-0821
- 北卡罗来纳州立大学计算机专业,2020年北卡罗来纳州立大学有哪些优势专业
- 8.单链表实现与反转
- SQL Server 进程无法连接到 Subscriber “xxxxxx”
- 用spark实现单词统计
- Python操作Excel文件:插入一列数据
- 带你理解面向过程与面向对象
- iObit Driver Booster 8 驱动更新失败 只停留在 1%
- 入手级仿真软件和编辑器安装(VIVADO)