Add: 增加生日禮英文排列

This commit is contained in:
shouchih_chen 2023-05-16 23:17:05 +08:00
parent b2602b5ef7
commit 8166fc30ae
9 changed files with 250 additions and 127 deletions

View File

@ -53,11 +53,26 @@ QList<NameInfo_t> BirthdayCreater::getNameByFileContent(Name_Type_e type, const
QString name_tc = line;
QStringList csvList = name_tc.split(',');
QString name, eng_name, bg_type;
QString name = csvList.at(0); //QString::fromLocal8Bit(csvList.at(0));
QString bg_type = csvList.at(1);//QString::fromLocal8Bit(csvList.at(1));
QString type_str = csvList.last();//QString::fromLocal8Bit(csvList.last());
qDebug() << "row :" << row << " " << name << ", bg_type: " << bg_type;
switch (type) {
case Name_zh:
name = csvList.at(0);
bg_type = csvList.at(1);
;
break;
case Name_zh_eng:
name = csvList.at(0);
eng_name = csvList.at(1);
bg_type = csvList.at(2);
break;
default:
break;
}
qDebug() << "row :" << row << " " << name <<", eng: "<< eng_name << ", bg_type: " << bg_type;
if (name.compare("name") == 0) {
//pass first line
@ -65,6 +80,7 @@ QList<NameInfo_t> BirthdayCreater::getNameByFileContent(Name_Type_e type, const
}
info.name1 = name;
info.name_eng = eng_name;
info.name2 = bg_type;
nameList.append(info);
@ -89,33 +105,93 @@ void BirthdayCreater::generaImageFromCSV(Name_Type_e type, const QString& filena
scene.setBackgroundBrush(QBrush(QColor(255, 255, 255)));
QGraphicsView view(&scene);
switch (type)
{
case Name_zh:
for (int idx = 0; idx < nameList.length(); idx++) {
for (int idx = 0; idx < nameList.length(); idx++) {
if ((idx % MAX_LABEL_IN_PAPER) == 0) {
if ((idx % MAX_LABEL_IN_PAPER) == 0) {
QGraphicsRectItem* bg_item = new QGraphicsRectItem(0, 0, BG_WIDTH, BG_HEIGHT);
bg_item->setBrush(QBrush(QColor(255, 255, 255)));
//QGraphicsPixmapItem* bg_item = QGraphicsPixmapItem(QPixmap(BG_SMAPLE_PATH));
scene.addItem(bg_item);
QGraphicsRectItem* bg_item = new QGraphicsRectItem(0, 0, BG_WIDTH, BG_HEIGHT);
bg_item->setBrush(QBrush(QColor(255, 255, 255)));
//QGraphicsPixmapItem* bg_item = QGraphicsPixmapItem(QPixmap(BG_SMAPLE_PATH));
scene.addItem(bg_item);
}
NameInfo_t name_info = nameList.at(idx);
int col_index = idx % MAX_LABEL_IN_PAPER;
QString label_rel_path = label_bg_map[name_info.name2];
QGraphicsPixmapItem* label_item = new QGraphicsPixmapItem(QPixmap(label_rel_path));
label_item->setPos(int(LABEL_POS_START.x() + LABEL_POS_X_OFFSET * col_index), int(LABEL_POS_START.y()));
label_item->setOpacity(1);
scene.addItem(label_item);
int chrismas_y_offset = 0;
if (name_info.name2.compare("co") == 0 || name_info.name2.compare("ol") == 0 ||
name_info.name2.compare("st") == 0 || name_info.name2.compare("sn") == 0) {
chrismas_y_offset = 30;
}
for (int i = 0; i < 2; i++) {
int name_word_len = name_info.name1.length();
qreal two_word_y = (name_word_len == 2) ? NAME_TWO_WORD_OFFSET / 2 : 0;
qreal offset_y = (name_word_len == 2) ? NAME_TWO_WORD_OFFSET : NAME_THREE_WORD_OFFSET;
for (int w = 0; w < name_word_len; w++) {
QGraphicsTextItem* word_item = new QGraphicsTextItem(name_info.name1.at(w));
word_item->setFont(font);
word_item->setDefaultTextColor(font_color);
if (i == 0) {
word_item->setPos(label_item->x() + NAME_OFFSET_START.x(), label_item->y() + NAME_OFFSET_START.y() + two_word_y + chrismas_y_offset + offset_y * w);
}
else {
word_item->setTransform(QTransform().fromScale(-1, -1));
word_item->setPos(label_item->x() + NAME_OFFSET_REVERSE_START.x(), label_item->y() + NAME_OFFSET_REVERSE_START.y() - two_word_y - chrismas_y_offset - offset_y * w);
}
scene.addItem(word_item);
}
}
if ((idx % MAX_LABEL_IN_PAPER) == (MAX_LABEL_IN_PAPER - 1) || idx == nameList.count() - 1) {
QString date_str = QDateTime::currentDateTime().toString("MMddhhmm");
QString file_name = QString("Birthday_%2_%1.jpg").arg(QString::number(export_times + 1), date_str);
saveToImage(file_name, &scene);
export_times++;
scene.clear();
}
}
NameInfo_t name_info = nameList.at(idx);
int col_index = idx % MAX_LABEL_IN_PAPER;
QString label_rel_path = label_bg_map[name_info.name2];
QGraphicsPixmapItem* label_item = new QGraphicsPixmapItem(QPixmap(label_rel_path));
label_item->setPos(int(LABEL_POS_START.x() + LABEL_POS_X_OFFSET * col_index), int(LABEL_POS_START.y()));
label_item->setOpacity(1);
scene.addItem(label_item);
break;
case Name_eng:
break;
case Name_zh_eng:
for (int idx = 0; idx < nameList.length(); idx++) {
int chrismas_y_offset = 0;
if (name_info.name2.compare("co") == 0 || name_info.name2.compare("ol") == 0 ||
name_info.name2.compare("st") == 0 || name_info.name2.compare("sn") == 0) {
chrismas_y_offset = 30;
}
if ((idx % MAX_LABEL_IN_PAPER) == 0) {
for (int i = 0; i < 2; i++) {
QGraphicsRectItem* bg_item = new QGraphicsRectItem(0, 0, BG_WIDTH, BG_HEIGHT);
bg_item->setBrush(QBrush(QColor(255, 255, 255)));
//QGraphicsPixmapItem* bg_item = QGraphicsPixmapItem(QPixmap(BG_SMAPLE_PATH));
scene.addItem(bg_item);
}
NameInfo_t name_info = nameList.at(idx);
int col_index = idx % MAX_LABEL_IN_PAPER;
QString label_rel_path = label_bg_map[name_info.name2];
QGraphicsPixmapItem* label_item = new QGraphicsPixmapItem(QPixmap(label_rel_path));
label_item->setPos(int(LABEL_POS_START.x() + LABEL_POS_X_OFFSET * col_index), int(LABEL_POS_START.y()));
label_item->setOpacity(1);
scene.addItem(label_item);
int chrismas_y_offset = 0;
if (name_info.name2.compare("co") == 0 || name_info.name2.compare("ol") == 0 ||
name_info.name2.compare("st") == 0 || name_info.name2.compare("sn") == 0) {
chrismas_y_offset = 30;
}
// add ZH word
int name_word_len = name_info.name1.length();
qreal two_word_y = (name_word_len == 2) ? NAME_TWO_WORD_OFFSET / 2 : 0;
qreal offset_y = (name_word_len == 2) ? NAME_TWO_WORD_OFFSET : NAME_THREE_WORD_OFFSET;
@ -124,28 +200,41 @@ void BirthdayCreater::generaImageFromCSV(Name_Type_e type, const QString& filena
QGraphicsTextItem* word_item = new QGraphicsTextItem(name_info.name1.at(w));
word_item->setFont(font);
word_item->setDefaultTextColor(font_color);
if (i == 0) {
word_item->setPos(label_item->x() + NAME_OFFSET_START.x(), label_item->y() + NAME_OFFSET_START.y() + two_word_y + chrismas_y_offset + offset_y * w);
}
else {
word_item->setTransform(QTransform().fromScale(-1, -1));
word_item->setPos(label_item->x() + NAME_OFFSET_REVERSE_START.x(), label_item->y() + NAME_OFFSET_REVERSE_START.y() - two_word_y - chrismas_y_offset - offset_y * w);
}
word_item->setPos(label_item->x() + NAME_OFFSET_START.x(), label_item->y() + NAME_OFFSET_START.y() + two_word_y + chrismas_y_offset + offset_y * w);
scene.addItem(word_item);
}
}
//TODO: add English world
QGraphicsTextItem* eng_word_item = new QGraphicsTextItem(name_info.name_eng);
QFont _new_font = QFont(EnglisthFont());
_new_font.setWeight(QFont::ExtraBold);
int _new_size = getFontSizebyStr(_new_font, 120, 480, name_info.name_eng);
_new_font.setPixelSize(_new_size);
if ((idx % MAX_LABEL_IN_PAPER) == (MAX_LABEL_IN_PAPER - 1) || idx == nameList.count() - 1) {
QString date_str = QDateTime::currentDateTime().toString("MMddhhmm");
QString file_name = QString("Birthday_%2_%1.jpg").arg(QString::number(export_times + 1), date_str);
saveToImage(file_name, &scene);
export_times++;
eng_word_item->setFont(_new_font);
QRectF rect = eng_word_item->boundingRect();
eng_word_item->setDefaultTextColor(font_color);
scene.clear();
eng_word_item->setRotation(-90);
eng_word_item->setPos(label_item->x() + 140.0 - rect.height()/2.0, label_item->y() + 1580 - chrismas_y_offset + rect.width()/2);
scene.addItem(eng_word_item);
if ((idx % MAX_LABEL_IN_PAPER) == (MAX_LABEL_IN_PAPER - 1) || idx == nameList.count() - 1) {
QString date_str = QDateTime::currentDateTime().toString("MMddhhmm");
QString file_name = QString("Birthday_%2_%1.jpg").arg(QString::number(export_times + 1), date_str);
saveToImage(file_name, &scene);
export_times++;
scene.clear();
}
}
break;
default:
break;
}
QMessageBox msgBox;
msgBox.setText(QString().asprintf("Export Finshed. Count:%d", export_times));
msgBox.exec();

View File

@ -112,6 +112,7 @@ QList<NameInfo_t> INameCreater::getNameByFile(Name_Type_e type, const QString& f
QList<NameInfo_t> INameCreater::getNameByFileContent(Name_Type_e type, const QByteArray& conetent)
{
(void)type;
QList<NameInfo_t> nameList;
QTextCodec* tc = QTextCodec::codecForName("Big5");
QString codec = tc->toUnicode(conetent.data());
@ -159,7 +160,7 @@ int INameCreater::getFontSizebyStr(const QFont& font, int max_font_size,int max_
QFont _font(font);
int font_size = max_font_size;
while (font_size > 10) {
_font.setPixelSize(max_font_size);
_font.setPixelSize(font_size);
QFontMetrics fm(_font);
if (fm.horizontalAdvance(str) <= max_label_width) break;
font_size--;

View File

@ -10,6 +10,7 @@
struct NameInfo_t {
QString name1;
QString name2;
QString name_eng;
QString bg_path;
bool is_number_bg;
int bg_type;
@ -26,6 +27,13 @@ public:
INameCreater();
~INameCreater();
void setEnglishFont(const QFont& font) {
eng_Font = QFont(font);
}
QFont EnglisthFont() const {
return eng_Font;
}
protected:
void saveToImage(const QString& filename, QGraphicsScene* scene);
@ -33,8 +41,9 @@ protected:
QList<NameInfo_t> getNameByFileContent(Name_Type_e type, const QByteArray& conetent);
virtual void generaImageFromCSV(Name_Type_e type, const QString& filename, const QByteArray& filecontent, const QFont& font, const QColor& font_color);
private:
int getFontSizebyStr(const QFont& font, int max_font_size, int max_label_width, const QString& str);
private:
QFont eng_Font;
};

View File

@ -17,71 +17,85 @@
#include "NewFiveCreater.h"
#define FONT_NAME "DFYuanStd-W8.otf"
#define FONT_PATH ":/NameCreater/_exp/DFYuanStd-W8.otf"
#define FONT_SIZE 120
#define TOWEL_FONT_PATH ":/NameCreater/_exp/W1.ttc"
#define ENGLISH_FONT_PATH ":/NameCreater/_exp/AcuminVariableConcept.otf"
#define VERSION "v2.0.0"
#define FONT_SIZE 120
#define VERSION "v2.1.0"
NameCreater::NameCreater(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
connect(ui.fivesingle_btn, &QPushButton::released, this, &NameCreater::OnClickedReadBtn);
//connect(ui.fiveold_btn, &QPushButton::released, this, &NameCreater::OnClickedReadBtn);
connect(ui.birthday_btn, &QPushButton::released, this, &NameCreater::OnClickedReadBtn);
connect(ui.towel_btn, &QPushButton::released, this, &NameCreater::OnClickedReadBtn);
connect(ui.fivenew_btn, &QPushButton::released, this, &NameCreater::OnClickedReadBtn);
connect(ui.fivesingle_btn, &QPushButton::released, this, &NameCreater::OnClickedReadBtn);
//connect(ui.fiveold_btn, &QPushButton::released, this, &NameCreater::OnClickedReadBtn);
connect(ui.birthday_btn, &QPushButton::released, this, &NameCreater::OnClickedReadBtn);
connect(ui.towel_btn, &QPushButton::released, this, &NameCreater::OnClickedReadBtn);
connect(ui.fivenew_btn, &QPushButton::released, this, &NameCreater::OnClickedReadBtn);
connect(ui.birthday_zh_eng_btn, &QPushButton::released, this, &NameCreater::OnClickedReadBtn);
QString font_path = FONT_PATH;
QFile font_res(font_path);
if (!font_res.open(QIODevice::ReadOnly)) {
QMessageBox msgBox;
msgBox.setText("Can not load font file!" + font_path);
msgBox.exec();
font_res.close();
}
QString font_path = FONT_PATH;
QFile font_res(font_path);
if (!font_res.open(QIODevice::ReadOnly)) {
QMessageBox msgBox;
msgBox.setText("Can not load font file!" + font_path);
msgBox.exec();
font_res.close();
}
int id = QFontDatabase::addApplicationFontFromData(font_res.readAll());
QStringList family_list = QFontDatabase::applicationFontFamilies(id);
int id = QFontDatabase::addApplicationFontFromData(font_res.readAll());
QStringList family_list = QFontDatabase::applicationFontFamilies(id);
font = QFont(family_list.at(0));
font.setPixelSize(FONT_SIZE);
font_res.close();
font = QFont(family_list.at(0));
font.setPixelSize(FONT_SIZE);
font_res.close();
font_path = QString(TOWEL_FONT_PATH);
QFile font_res_towel(font_path);
if (!font_res_towel.open(QIODevice::ReadOnly)) {
QMessageBox msgBox;
msgBox.setText("Can not load font file!" + font_path);
msgBox.exec();
font_res_towel.close();
}
font_path = QString(TOWEL_FONT_PATH);
QFile font_res_towel(font_path);
if (!font_res_towel.open(QIODevice::ReadOnly)) {
QMessageBox msgBox;
msgBox.setText("Can not load font file!" + font_path);
msgBox.exec();
font_res_towel.close();
}
id = QFontDatabase::addApplicationFontFromData(font_res_towel.readAll());
font_towel = QFont(QFontDatabase::applicationFontFamilies(id).at(0));
font_towel.setPixelSize(240);
font_towel.setLetterSpacing(QFont::PercentageSpacing, 42);
id = QFontDatabase::addApplicationFontFromData(font_res_towel.readAll());
font_towel = QFont(QFontDatabase::applicationFontFamilies(id).at(0));
font_towel.setPixelSize(240);
font_towel.setLetterSpacing(QFont::PercentageSpacing, 42);
font_color = QColor(0, 0, 0);
QFont tital_font = QFont(font);
tital_font.setPixelSize(20);
font_path = QString(ENGLISH_FONT_PATH);
QFile font_res_eng(font_path);
if (!font_res_eng.open(QIODevice::ReadOnly)) {
QMessageBox msgBox;
msgBox.setText("Can not load font file!" + font_path);
msgBox.exec();
font_res_eng.close();
}
QFont version_font = QFont(font);
version_font.setPixelSize(12);
id = QFontDatabase::addApplicationFontFromData(font_res_eng.readAll());
font_english = QFont(QFontDatabase::applicationFontFamilies(id).at(0));
//ui.tital_label->setFont(tital_font);
ui.version_label->setFont(version_font);
ui.version_label->setText(VERSION);
font_color = QColor(0, 0, 0);
QFont tital_font = QFont(font);
tital_font.setPixelSize(20);
QFont version_font = QFont(font);
version_font.setPixelSize(12);
//ui.tital_label->setFont(tital_font);
ui.version_label->setFont(version_font);
ui.version_label->setText(VERSION);
QList<QLabel*> titals = findChildren<QLabel*>(QRegExp("tital_label"));
foreach(auto tital, titals) {
tital->setFont(tital_font);
}
foreach(auto tital, titals) {
tital->setFont(tital_font);
}
@ -90,22 +104,27 @@ NameCreater::NameCreater(QWidget *parent)
}
void NameCreater::OnClickedReadBtn() {
auto sender =(QPushButton*) QObject::sender();
auto sender =(QPushButton*) QObject::sender();
auto fileContentReady = [this, sender](const QString &fileName, const QByteArray &fileContent) {
if (fileName.isEmpty()) {
// No file was selected
}
else {
// Use fileName and fileContent
if(sender == ui.fivesingle_btn) FiveToSingle().generaImageFromCSV(Name_Type_e::Name_zh,fileName, fileContent, this->font, this->font_color);
//if(sender == ui.fiveold_btn) OldFiveCreater().generaImageFromCSV(fileName, fileContent, this->font, this->font_color);
if(sender == ui.birthday_btn) BirthdayCreater().generaImageFromCSV(Name_Type_e::Name_zh, fileName, fileContent, this->font, this->font_color);
if(sender == ui.fivenew_btn) NewFiveCreater().generaImageFromCSV(Name_Type_e::Name_zh, fileName, fileContent, this->font, this->font_color);
if(sender == ui.towel_btn) TowelCreater().generaImageFromCSV(Name_Type_e::Name_zh, fileName, fileContent, this->font_towel, this->font_color);
auto fileContentReady = [this, sender](const QString &fileName, const QByteArray &fileContent) {
if (fileName.isEmpty()) {
// No file was selected
}
else {
// Use fileName and fileContent
if(sender == ui.fivesingle_btn) FiveToSingle().generaImageFromCSV(Name_Type_e::Name_zh,fileName, fileContent, this->font, this->font_color);
//if(sender == ui.fiveold_btn) OldFiveCreater().generaImageFromCSV(fileName, fileContent, this->font, this->font_color);
if(sender == ui.birthday_btn) BirthdayCreater().generaImageFromCSV(Name_Type_e::Name_zh, fileName, fileContent, this->font, this->font_color);
if(sender == ui.fivenew_btn) NewFiveCreater().generaImageFromCSV(Name_Type_e::Name_zh, fileName, fileContent, this->font, this->font_color);
if(sender == ui.towel_btn) TowelCreater().generaImageFromCSV(Name_Type_e::Name_zh, fileName, fileContent, this->font_towel, this->font_color);
if (sender == ui.birthday_zh_eng_btn) {
BirthdayCreater creater;
creater.setEnglishFont(font_english);
creater.generaImageFromCSV(Name_Type_e::Name_zh_eng, fileName, fileContent, this->font, this->font_color);
}
}
};
QFileDialog::getOpenFileContent("CSV (*.csv)", fileContentReady);
}
};
QFileDialog::getOpenFileContent("CSV (*.csv)", fileContentReady);
}

View File

@ -12,7 +12,7 @@ public:
private:
Ui::NameCreaterClass ui;
QFont font, font_towel;
QFont font, font_towel, font_english;
QColor font_color;

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 7.0.2, 2023-05-06T07:41:44. -->
<!-- Written by QtCreator 7.0.2, 2023-05-16T20:01:59. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
@ -390,23 +390,6 @@
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
<value type="QString">0</value>
<value type="QString">1</value>
<value type="QString">2</value>
<value type="QString">3</value>
<value type="QString">4</value>
<value type="QString">5</value>
<value type="QString">6</value>
<value type="QString">7</value>
<value type="QString">8</value>
<value type="QString">9</value>
<value type="QString">10</value>
<value type="QString">11</value>
<value type="QString">12</value>
<value type="QString">13</value>
<value type="QString">14</value>
</valuelist>
<valuelist type="QVariantList" key="CustomOutputParsers"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">NameCreater</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">WebAssembly.RunConfiguration.EmrunD:/_develop/_project/NameCreater/NameCreater/NameCreater.pro</value>

View File

@ -66,5 +66,6 @@
<file>resource/five/ng_3.jpg</file>
<file>resource/five/ng_4.jpg</file>
<file>resource/five/ng_5.jpg</file>
<file>_exp/AcuminVariableConcept.otf</file>
</qresource>
</RCC>

Binary file not shown.

View File

@ -0,0 +1,21 @@
name,eng_name,bg_type
Á¤_¹ä,Alice,r
Á¤_¹ä,Alice,r
Á¤_¹ä,Alice,r
Á¤_¹ä,Alice,r
Á¤_¹ä,Alice,r
¸â¨°ºÓ,George,sn
¸â¨°ºÓ,George,co
¸â¨°ºÓ,George,ol
¸â¨°ºÓ,George,m
¸â¨°ºÓ,George,y
¸â¨°ºÓ,George,b
³¯§Ó,Jolin,g
³¯¦u§Ó,Chirs,m
³¯¦u§Ó,xxxxxxxdgde,p
³¯§Ó,gfdgadgdd,r
§d¨Î¹a,Jolin,co
§d¨Î¹a,Jolin,ol
§d¹a,Jessica,sn
§d¹a,Arial,st
§d¹a,Arial,b
1 name eng_name bg_type
2 Á¤_¹ä Alice r
3 Á¤_¹ä Alice r
4 Á¤_¹ä Alice r
5 Á¤_¹ä Alice r
6 Á¤_¹ä Alice r
7 ¸â¨°ºÓ George sn
8 ¸â¨°ºÓ George co
9 ¸â¨°ºÓ George ol
10 ¸â¨°ºÓ George m
11 ¸â¨°ºÓ George y
12 ¸â¨°ºÓ George b
13 ³¯§Ó Jolin g
14 ³¯¦u§Ó Chirs m
15 ³¯¦u§Ó xxxxxxxdgde p
16 ³¯§Ó gfdgadgdd r
17 §d¨Î¹a Jolin co
18 §d¨Î¹a Jolin ol
19 §d¹a Jessica sn
20 §d¹a Arial st
21 §d¹a Arial b