案例分享:Qt政务标签设计器,标签排版软件定制与打印

若该文为原创文章,转载请注明原文出处
本文章博客地址:https://hpzwl.blog.csdn.net/article/details/119730466
长期持续带来更多项目与技术分享,咨询请加QQ:21497936、微信:yangsir198808
红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…(点击传送门)

合作案例专栏:案例分享(体验Demo可下载,只定制)


需求

  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

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
要实现一个标签打印设计软件,需要以下步骤: 1. 设计界面:使用Qt的界面设计设计软件界面,包括菜单栏、工具栏、标签设计区域等。 2. 添加控件:在标签设计区域添加需要的控件,如标签尺寸、文本框、图片框等。 3. 编写代码:编写Qt代码实现标签设计、预览、打印等功能。可以使用Qt打印机类实现打印功能,也可以使用第三方库,如QZ Tray。 4. 测试和调试:测试和调试软件,确保功能正常。 下面是一个简单的示例代码,实现了一个标签打印设计软件的基本功能: ```cpp #include <QtWidgets> class LabelDesigner : public QMainWindow { public: LabelDesigner(QWidget *parent = nullptr) : QMainWindow(parent) { // 添加菜单栏 QMenuBar *menuBar = new QMenuBar(this); setMenuBar(menuBar); // 添加文件菜单 QMenu *fileMenu = menuBar->addMenu(tr("文件")); // 添加打开和保存动作 QAction *openAction = fileMenu->addAction(tr("打开")); connect(openAction, &QAction::triggered, this, &LabelDesigner::openFile); QAction *saveAction = fileMenu->addAction(tr("保存")); connect(saveAction, &QAction::triggered, this, &LabelDesigner::saveFile); // 添加工具栏 QToolBar *toolBar = addToolBar(tr("工具")); toolBar->setIconSize(QSize(16, 16)); // 添加标签尺寸选择框 QComboBox *sizeCombo = new QComboBox(this); sizeCombo->addItem(tr("2 x 1")); sizeCombo->addItem(tr("3 x 2")); sizeCombo->addItem(tr("4 x 3")); toolBar->addWidget(sizeCombo); // 添加文本框和图片框 QLineEdit *textEdit = new QLineEdit(this); toolBar->addWidget(textEdit); QLabel *imageLabel = new QLabel(this); toolBar->addWidget(imageLabel); // 添加标签设计区域 QWidget *labelWidget = new QWidget(this); setCentralWidget(labelWidget); QVBoxLayout *layout = new QVBoxLayout(labelWidget); layout->addWidget(new QLabel(tr("标签设计区域"), labelWidget)); // 添加打印按钮 QPushButton *printButton = new QPushButton(tr("打印"), this); toolBar->addWidget(printButton); connect(printButton, &QPushButton::clicked, this, &LabelDesigner::printLabel); } private: void openFile() { // 打开文件对话框 QString fileName = QFileDialog::getOpenFileName(this, tr("打开文件")); if (!fileName.isEmpty()) { // 加载文件内容 } } void saveFile() { // 保存文件对话框 QString fileName = QFileDialog::getSaveFileName(this, tr("保存文件")); if (!fileName.isEmpty()) { // 保存文件内容 } } void printLabel() { // 打印标签 QPrinter printer; printer.setPageSize(QPrinter::A4); QPrintDialog dialog(&printer, this); if (dialog.exec() == QDialog::Accepted) { QPainter painter(&printer); painter.drawText(10, 10, "Hello, World!"); } } }; int main(int argc, char *argv[]) { QApplication app(argc, argv); LabelDesigner designer; designer.show(); return app.exec(); } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长沙红胖子Qt

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值