案例分享:Qt政務標籤設計器,標籤排版軟體定製與列印

語言: CN / TW / HK

需求

  1.標籤設計器;   2.具備文字排版功能;   3.支援六種排版格式;   4.排版後可以輸出列印(demo中不包含);   5.排版後可以輸出標籤的指定協議文字FBD格式;   6.可以調整對應標籤的一些位置,x,y,寬度,高度,橫向間距,縱向間距;   7.支援排版後的標籤預覽;   8.標籤排版文字錯誤提示;

<br>

Demo v1.6.0

  在這裡插入圖片描述   在這裡插入圖片描述   在這裡插入圖片描述   在這裡插入圖片描述   在這裡插入圖片描述   在這裡插入圖片描述   在這裡插入圖片描述

體驗下載地址

  CSDN(粉絲免積分下載):https://download.csdn.net/download/qq21497936/21109751   QQ群:1047134658(點選“檔案”搜尋“labelDesigner ”,群內與博文同步更新)

<br>

模組化

  模組化設計構架:   在這裡插入圖片描述

<br>

核心原始碼標頭檔案

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

<br>

若該文為原創文章,轉載請註明原文出處 本文章部落格地址:https://hpzwl.blog.csdn.net/article/details/119730466

「其他文章」