需求

  1.标签设计器;
  2.具备文字排版功能;
  3.支持六种排版格式;
  4.排版后可以输出打印(demo中不包含);
  5.排版后可以输出标签的指定协议文本FBD格式;
  6.可以调整对应标签的一些位置,x,y,宽度,高度,横向间距,纵向间距;
  7.支持排版后的标签预览;
  8.标签排版文本错误提示;

 

Demo v1.6.0

  
  
  
  
  
  
  

体验下载地址

  CSDN(粉丝免积分下载):https://download.csdn.net/download/qq21497936/21109751
  QQ群:1047134658(点击“文件”搜索“labelDesigner ”,群内与博文同步更新)

 

模块化

  模块化设计构架:
  

 

核心源码头文件

Widget.h

#ifndef WIDGET_H
#define WIDGET_H #include <QTextCodec>
#include <QWidget>
#include <QAbstractButton>
#include <QFileDialog>
#include <QMessageBox>
#include "LabelWidget.h" namespace Ui {
class Widget;
} class Widget : public QWidget
{
Q_OBJECT public:
explicit Widget(QWidget *parent = 0);
~Widget(); protected:
void initControls();
void createLabelWidgets();
void updateLabelWidgets();
void updateScale();
QStringList parseNames(QString content); protected slots:
void slot_updateScale();
void slot_buttonClicked(QAbstractButton *pAbstractButton); protected:
void resizeEvent(QResizeEvent *event); private slots:
void on_spinBox_x_valueChanged(int arg1);
void on_spinBox_y_valueChanged(int arg1);
void on_spinBox_xNumber_valueChanged(int arg1);
void on_spinBox_yNumber_valueChanged(int arg1);
void on_spinBox_labelWidth_valueChanged(int arg1);
void on_spinBox_labelHeight_valueChanged(int arg1);
void on_doubleSpinBox_scale_valueChanged(double arg1);
void on_spinBox_labelVerticallSpace_valueChanged(int arg1);
void on_spinBox_labelHorizalSpace_valueChanged(int arg1);
void on_textEdit_names_textChanged();
void on_pushButton_createLabel_clicked(); void on_pushButton_export_clicked(); private:
Ui::Widget *ui; private:
QList<LabelWidget *> _listLabelWidget;
QStringList _listNames;
QStringList _listErrorNames; int _xMM;
int _yMM;
int _widthMM;
int _heightMM;
int _widthSpace;
int _heightSpace;
int _widthNumber;
int _heightNumber;
bool _firstRotate180;
bool _secondRotate180;
bool _showFontVertical;
int _fontPt;
}; #endif // WIDGET_H

ScreenManager.h

#ifndef SCREENMANAGER_H
#define SCREENMANAGER_H #include <QObject> class ScreenManager : public QObject
{
Q_OBJECT
public:
explicit ScreenManager(QObject *parent = nullptr); signals: public slots: public:
static float getScreenWidthMM();
static float getScreenHeightMM();
static float getScreenWidthMM(int width);
static float getScreenHeightMM(int height);
static int getWidth();
static int getHeight();
static int getWidth(float widthMM);
static int getHeight(float heightMM); private:
static float inchToMMScale; }; #endif // SCREENMANAGER_H

LabelWidget.h

#ifndef LABELWIDGET_H
#define LABELWIDGET_H #include <QWidget>
#include <QTimer>
#include <QtMath> namespace Ui {
class LabelWidget;
} class LabelWidget : public QWidget
{
Q_OBJECT public:
explicit LabelWidget(QWidget *parent = 0);
~LabelWidget(); public:
float getXMM() const;
float getYMM() const;
float getLabelWidthMM() const;
float getLabelHeightMM() const;
int getVerticalLabelsNumber() const;
int getHorizalLabelNumber() const;
float getScale() const;
float getLabelHorizalSpaceMM() const;
float getLabelVerticalSpaceMM() const;
QStringList getListName() const;
bool getFirstLabelRotate180() const;
bool getSecondLabelRotate180() const;
int getFontPt() const;
bool getShowFontVertical() const; public:
void setXMM(float xMM);
void setYMM(float yMM);
void setLabelWidthMM(float labelWidthMM);
void setLabelHeightMM(float labelHeightMM);
void setVerticalLabelsNumber(int verticalLabelsNumber);
void setHorizalLabelNumber(int horizalLabelNumber);
void setScale(float scale);
void setLabelHorizalSpaceMM(float labelHorizalSpaceMM);
void setLabelVerticalSpaceMM(float labelVerticalSpaceMM);
void setLabelsNames(QStringList listName);
void setFirstLabelRotate180(bool firstLabelRotate180);
void setSecondLabelRotate180(bool secondLabelRotate180);
void setFontPt(int fontPt);
void setShowFontVertical(bool showFontVertical); protected:
void initControls();
void updateSize(); protected slots:
void slot_initScale(); // 用于规避初始化位置偏差 protected:
void paintEvent(QPaintEvent *event);
void resizeEvent(QResizeEvent *event); protected:
void drawBackground(QPainter *painter);
void drawLabelBorder(QPainter *painter);
void drawLabel(QPainter *painter); private:
Ui::LabelWidget *ui; private:
QColor _backgroundColor;
QColor _labelBorderColor;
int _labelBorderWidth; float _labelWidthMM;
float _labelHeightMM;
float _labelHorizalSpaceMM;
float _labelVerticalSpaceMM;
int _verticalLabelsNumber;
int _horizalLabelNumber;
float _xMM;
float _yMM;
float _pageWidthMM;
float _pageHeightMM;
float _scale; int _x;
int _y;
int _labelWidth;
int _labelHeight;
int _pageWidth;
int _pageHeight;
int _labelHorizalSpace;
int _labelVerticalSpace; bool _firstLabelRotate180;
bool _secondLabelRotate180;
int _fontPt;
bool _showFontVertical; QStringList _listName;
}; #endif
 

若该文为原创文章,转载请注明原文出处
本文章博客地址:https://hpzwl.blog.csdn.net/article/details/119730466

案例分享:Qt政务标签设计器,标签排版软件定制与打印的更多相关文章

  1. 基于Qt的流程设计器(一)

    一: 先来看一下界面的截图:   说明: 拖动节点的时候,与该节点相关的箭头连线也会跟着调整: 用户可以使用鼠标从一个节点拖出一个箭头到另一个节点(鼠标在空白区域点击一下,拖出的箭头消失)   这三个 ...

  2. C#Winform设计的通用标签设计器

    技术看点 PropertyGrid的使用 自定义控件的使用 对象序列化成XML GDI+Windows驱动打印 前言 是的,一不小心把公司名称透露了.索性帮公司打一下广告.公司(上海易溯信息科技)是中 ...

  3. Qt编写控件属性设计器12-用户属性

    一.前言 用户属性是后面新增加的一个功能,自定义控件如果采用的Q_PROPERTY修饰的属性,会自动识别到属性栏中,这个一般称为控件属性,在组态设计软件中,光有控件本身的控件属性还是不够的,毕竟这些属 ...

  4. Qt编写自定义控件39-导航标签

    一.前言 在很多菜单导航界面中,当单击了二级菜单或者三级菜单以后,顶部会显示带箭头或者其他标识的导航标签,可以单击该标签快速切换到对应的界面,也作为指示当前处于哪一级菜单下的界面,主要在WEB中大肆流 ...

  5. Qt编写自定义控件属性设计器

    以前做.NET开发中,.NET直接就集成了属性设计器,VS不愧是宇宙第一IDE,你能够想到的都给你封装好了,用起来不要太爽!因为项目需要自从全面转Qt开发已经6年有余,在工业控制领域,有一些应用场景需 ...

  6. qt设计器中使用自定义控件

    当qt设计器中的控件不能满足需要时,这时就要自定义控件.然后再在qt设计器中使用. 在qt设计器中使用自定义控件时,可以用提升. 从控件派生出新的类: 然后在qt设计器中右键需要提升的控件: 填入提升 ...

  7. Qt笔记之使用设计器自定义窗口标题栏

    1.在窗口显示之前,设置WindowFlags为FramelessWindowHint,以产生一个没有边界的窗口 例如 Widget::Widget(QWidget *parent) : QWidge ...

  8. Qt编写控件属性设计器

    一.前言 自从研究Qt编写自定义控件以来,一发不可收拾,越多越多人有类似的需求找我定制控件,陆陆续续写了上百个控件,目前已超过150个,于是逐渐衍生了另外一个需求,提供一个控件属性设计器,类似QtDe ...

  9. Qt编写控件属性设计器11-导入xml

    一.前言 上一篇文章负责把设计好的控件数据导出到了xml文件,本偏文章负责把导出的xml数据文件导入,然后在画布上自动生成对应的控件,Qt内置的xml数据解析功能,非常强大,都封装在QtXml组件中, ...

随机推荐

  1. 8、基本数据类型(dict)

    8.1.字典: 1.字典元素用大括号括起来,用逗号分割每个元素,字典元素是"key:value"的形式 dic = { "k1": 'v1', #键值对 &qu ...

  2. InterlliJ Debug启动提示:Method breakpoints may dramatically slow down debugging

  3. intelliJ idea 自动修复eslint语法问题

    在要修复代码的文件上或全选需要修复的代码,快捷键:ctrl+shift+a,调出Find Action面板.搜索fix eslint problems,点击此操作,自动修复完成.

  4. 并发王者课-铂金9:互通有无-Exchanger如何完成线程间的数据交换

    欢迎来到<并发王者课>,本文是该系列文章中的第22篇,铂金中的第9篇. 在前面的文章中,我们已经介绍了ReentrantLock,CountDownLatch,CyclicBarrier, ...

  5. Linux基础 -03

    2.2.3 head-tail 命令 #------head #head pass #查看头部内容,默认前10行 #head -n5 pass #查看头部前5行,使用-n指定 #-------tail ...

  6. PHP中“简单工厂模式”实例讲解(转)

      ? 1 2 3 4 5 6 7 8 原创文章,转载请注明出处:http://www.cnblogs.com/hongfei/archive/2012/07/07/2580776.html   简单 ...

  7. 基于Flink构建全场景实时数仓

    目录: 一. 实时计算初期 二. 实时数仓建设 三. Lambda架构的实时数仓 四. Kappa架构的实时数仓 五. 流批结合的实时数仓 实时计算初期 虽然实时计算在最近几年才火起来,但是在早期也有 ...

  8. Spring 的循环依赖问题

    什么是循环依赖 什么是循环依赖呢?可以把它拆分成循环和依赖两个部分来看,循环是指计算机领域中的循环,执行流程形成闭合回路:依赖就是完成这个动作的前提准备条件,和我们平常说的依赖大体上含义一致.放到 S ...

  9. C++ 标准模板库(STL)——算法(Algorithms)的用法及理解

    C++ STL中的算法(Algorithms)作用于容器.它们提供了执行各种操作的方式,包括对容器内容执行初始化.排序.搜索和转换等操作.按照对容器内容的操作可将STL 中的算法大致分为四类: (1) ...

  10. python all any函数(相反)

    ''' all() 函数用于判断给定的可迭代参数 iterable 中的所有元素是否都为 TRUE,如果是返回 True,否则返回 False. 元素除了是 0.空.FALSE 外都算 TRUE. 语 ...