案例分享:Qt政务标签设计器,标签排版软件定制与打印
需求
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政务标签设计器,标签排版软件定制与打印的更多相关文章
- 基于Qt的流程设计器(一)
一: 先来看一下界面的截图: 说明: 拖动节点的时候,与该节点相关的箭头连线也会跟着调整: 用户可以使用鼠标从一个节点拖出一个箭头到另一个节点(鼠标在空白区域点击一下,拖出的箭头消失) 这三个 ...
- C#Winform设计的通用标签设计器
技术看点 PropertyGrid的使用 自定义控件的使用 对象序列化成XML GDI+Windows驱动打印 前言 是的,一不小心把公司名称透露了.索性帮公司打一下广告.公司(上海易溯信息科技)是中 ...
- Qt编写控件属性设计器12-用户属性
一.前言 用户属性是后面新增加的一个功能,自定义控件如果采用的Q_PROPERTY修饰的属性,会自动识别到属性栏中,这个一般称为控件属性,在组态设计软件中,光有控件本身的控件属性还是不够的,毕竟这些属 ...
- Qt编写自定义控件39-导航标签
一.前言 在很多菜单导航界面中,当单击了二级菜单或者三级菜单以后,顶部会显示带箭头或者其他标识的导航标签,可以单击该标签快速切换到对应的界面,也作为指示当前处于哪一级菜单下的界面,主要在WEB中大肆流 ...
- Qt编写自定义控件属性设计器
以前做.NET开发中,.NET直接就集成了属性设计器,VS不愧是宇宙第一IDE,你能够想到的都给你封装好了,用起来不要太爽!因为项目需要自从全面转Qt开发已经6年有余,在工业控制领域,有一些应用场景需 ...
- qt设计器中使用自定义控件
当qt设计器中的控件不能满足需要时,这时就要自定义控件.然后再在qt设计器中使用. 在qt设计器中使用自定义控件时,可以用提升. 从控件派生出新的类: 然后在qt设计器中右键需要提升的控件: 填入提升 ...
- Qt笔记之使用设计器自定义窗口标题栏
1.在窗口显示之前,设置WindowFlags为FramelessWindowHint,以产生一个没有边界的窗口 例如 Widget::Widget(QWidget *parent) : QWidge ...
- Qt编写控件属性设计器
一.前言 自从研究Qt编写自定义控件以来,一发不可收拾,越多越多人有类似的需求找我定制控件,陆陆续续写了上百个控件,目前已超过150个,于是逐渐衍生了另外一个需求,提供一个控件属性设计器,类似QtDe ...
- Qt编写控件属性设计器11-导入xml
一.前言 上一篇文章负责把设计好的控件数据导出到了xml文件,本偏文章负责把导出的xml数据文件导入,然后在画布上自动生成对应的控件,Qt内置的xml数据解析功能,非常强大,都封装在QtXml组件中, ...
随机推荐
- 8、基本数据类型(dict)
8.1.字典: 1.字典元素用大括号括起来,用逗号分割每个元素,字典元素是"key:value"的形式 dic = { "k1": 'v1', #键值对 &qu ...
- InterlliJ Debug启动提示:Method breakpoints may dramatically slow down debugging
- intelliJ idea 自动修复eslint语法问题
在要修复代码的文件上或全选需要修复的代码,快捷键:ctrl+shift+a,调出Find Action面板.搜索fix eslint problems,点击此操作,自动修复完成.
- 并发王者课-铂金9:互通有无-Exchanger如何完成线程间的数据交换
欢迎来到<并发王者课>,本文是该系列文章中的第22篇,铂金中的第9篇. 在前面的文章中,我们已经介绍了ReentrantLock,CountDownLatch,CyclicBarrier, ...
- Linux基础 -03
2.2.3 head-tail 命令 #------head #head pass #查看头部内容,默认前10行 #head -n5 pass #查看头部前5行,使用-n指定 #-------tail ...
- PHP中“简单工厂模式”实例讲解(转)
? 1 2 3 4 5 6 7 8 原创文章,转载请注明出处:http://www.cnblogs.com/hongfei/archive/2012/07/07/2580776.html 简单 ...
- 基于Flink构建全场景实时数仓
目录: 一. 实时计算初期 二. 实时数仓建设 三. Lambda架构的实时数仓 四. Kappa架构的实时数仓 五. 流批结合的实时数仓 实时计算初期 虽然实时计算在最近几年才火起来,但是在早期也有 ...
- Spring 的循环依赖问题
什么是循环依赖 什么是循环依赖呢?可以把它拆分成循环和依赖两个部分来看,循环是指计算机领域中的循环,执行流程形成闭合回路:依赖就是完成这个动作的前提准备条件,和我们平常说的依赖大体上含义一致.放到 S ...
- C++ 标准模板库(STL)——算法(Algorithms)的用法及理解
C++ STL中的算法(Algorithms)作用于容器.它们提供了执行各种操作的方式,包括对容器内容执行初始化.排序.搜索和转换等操作.按照对容器内容的操作可将STL 中的算法大致分为四类: (1) ...
- python all any函数(相反)
''' all() 函数用于判断给定的可迭代参数 iterable 中的所有元素是否都为 TRUE,如果是返回 True,否则返回 False. 元素除了是 0.空.FALSE 外都算 TRUE. 语 ...