qt/LedOK/wProgramManager/etext.h
2022-08-25 18:37:24 +08:00

117 lines
2.9 KiB
C++

#ifndef ETEXT_H
#define ETEXT_H
#include <QPainter>
#include <QFontMetrics>
#include <QTextDocument>
#include <QGraphicsSceneMouseEvent>
#include "ebase.h"
#include "QTime"
//这条语句害死人,加了这条语句文字就不能做到无反锯齿 MYFONT.setHintingPreference(QFont::PreferNoHinting);
class txtBmpPage{
public:
int index=0;
QPixmap bitmap;
};
class txtBmpLine{
public:
int index=0;
int iStart=0;
int iEnd=0;
QPixmap bitmap;
};
class EText : public EBase {
Q_OBJECT
public:
enum PlayStyle {
Flip = 0,
Scroll,
Static
};
enum RollingStyle {
Left2Right = 0,
Right2Left,
Top2Bottom,
Bottom2Top
};
struct Turning {
int playDuration{10};
int pageDuration{10};
QString effect{"no"};
int effectDuration{3};
};
struct Rolling {
int playDuration{10};
int rollingStyle;
int rollingSpeed;
bool headTailConnected;
int headTailSpacing=10;
};
struct Data {
QString text;
QTextOption opt;
int lineSpacing = 0;
int letterSpacing = 0;
QColor cBackground;
int iPageCount=1;
int playStyle;
Turning turning;
Rolling rolling;
int playDuration{10};
};
static void setElement(const QJsonObject &json, Data &attr);
explicit EText(EBase *multiWin = nullptr);
explicit EText(const QJsonObject &json, EBase *multiWin = nullptr);
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;
int type() const override { return EBase::Text; }
QWidget* attrWgt() override;
bool save(const QString &pRoot) override;
QJsonObject attrJson() const override;
signals:
void sPageCountChanged(int);
public slots: // Widget
void RefreshBigPixmap();
void OnPageIndexPreview(int iPageIndex);
private:
int ClearPixmapTopAndBottomBlack();
void MakeMuliPngToDir(int iPageIndex,QString strPngPathAndName) ;
void MakeBigMoveUpOrDownOnePngToDir() ;
void MakeBigMoveLeftOrRightOnePngToDir() ;
void MakeBigMoveUpOrDownOnePngToDir(QString strPngPathAndName) ;
void MakeBigMoveLeftOrRightOnePngToDir(QString strPngPathAndName) ;
void CreateBigOnePixBmp();
int GetPagesPosList();
txtBmpPage GetFirstPagePixmap();
int GetLinePng(QPixmap bigOnePixmap) ;
void ProcessLastStartEndLianJie(QPixmap bmp,QString strPngFilePathName,int iLastRightNoWordWidth);
int GetWordSpaceRealInBmp(QPixmap bmp);
private: // Interior
QPointF m_pText;
QRectF m_rClip;
Data m_attr;
int m_lineH;
QPixmap mRenderImg;
QPixmap m_bigOnePixBmp;
QList<txtBmpPage> m_list;
qreal m_oldWidth=0;
qreal m_oldHeight=0;
QColor m_ImageBkColor;
QString m_pRootPath;
QList<txtBmpLine> m_linelist;
};
#endif // ETEXT_H