diff --git a/NameCreater/NameCreater.pri b/NameCreater/NameCreater.pri new file mode 100644 index 0000000..c0e878e --- /dev/null +++ b/NameCreater/NameCreater.pri @@ -0,0 +1,14 @@ +# ---------------------------------------------------- +# This file is generated by the Qt Visual Studio Tools. +# ------------------------------------------------------ + +# This is a reminder that you are using a generated .pro file. +# Remove it when you are finished editing this file. +message("You are running qmake on a generated .pro file. This may not work!") + + +HEADERS += ./NameCreater.h +SOURCES += ./NameCreater.cpp \ + ./main.cpp +FORMS += ./NameCreater.ui +RESOURCES += ./NameCreater.qrc diff --git a/NameCreater/NameCreater.pro b/NameCreater/NameCreater.pro new file mode 100644 index 0000000..6594743 --- /dev/null +++ b/NameCreater/NameCreater.pro @@ -0,0 +1,21 @@ +QT += core gui + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + +CONFIG += c++11 + +# You can make your code fail to compile if it uses deprecated APIs. +# In order to do so, uncomment the following line. +#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 + +include(NameCreater.pri) + + +# Default rules for deployment. +qnx: target.path = /tmp/$${TARGET}/bin +else: unix:!android: target.path = /opt/$${TARGET}/bin +!isEmpty(target.path): INSTALLS += target + + + + diff --git a/NameCreater/NameCreater.pro.user b/NameCreater/NameCreater.pro.user new file mode 100644 index 0000000..a0b8d15 --- /dev/null +++ b/NameCreater/NameCreater.pro.user @@ -0,0 +1,419 @@ + + + + + + EnvironmentId + {f917f426-b975-46c9-8edb-fd77a95b6be2} + + + ProjectExplorer.Project.ActiveTarget + 1 + + + ProjectExplorer.Project.EditorSettings + + true + false + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + UTF-8 + false + 4 + false + 80 + true + true + 1 + false + true + false + 0 + true + true + 0 + 8 + true + false + 1 + true + true + true + *.md, *.MD, Makefile + false + true + + + + ProjectExplorer.Project.PluginSettings + + + true + false + true + true + true + true + + + 0 + true + + -fno-delayed-template-parsing + + true + Builtin.BuildSystem + + true + true + Builtin.DefaultTidyAndClazy + 4 + + + + true + + + + + ProjectExplorer.Project.Target.0 + + Desktop + Desktop Qt 5.15.2 MinGW 32-bit + Desktop Qt 5.15.2 MinGW 32-bit + qt.qt5.5152.win32_mingw81_kit + 1 + 0 + 0 + + 0 + D:\_0E\_Private\_Software\namecreater\build-NameCreater-Desktop_Qt_5_15_2_MinGW_32_bit-Debug + D:/_0E/_Private/_Software/namecreater/build-NameCreater-Desktop_Qt_5_15_2_MinGW_32_bit-Debug + + + true + QtProjectManager.QMakeBuildStep + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Debug + Qt4ProjectManager.Qt4BuildConfiguration + 2 + + + D:\_0E\_Private\_Software\namecreater\build-NameCreater-Desktop_Qt_5_15_2_MinGW_32_bit-Release + D:/_0E/_Private/_Software/namecreater/build-NameCreater-Desktop_Qt_5_15_2_MinGW_32_bit-Release + + + true + QtProjectManager.QMakeBuildStep + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Release + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + + + 0 + D:\_0E\_Private\_Software\namecreater\build-NameCreater-Desktop_Qt_5_15_2_MinGW_32_bit-Profile + D:/_0E/_Private/_Software/namecreater/build-NameCreater-Desktop_Qt_5_15_2_MinGW_32_bit-Profile + + + true + QtProjectManager.QMakeBuildStep + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Profile + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + 0 + + 3 + + + 0 + Deploy + Deploy + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + true + true + true + + 2 + + Qt4ProjectManager.Qt4RunConfiguration:D:/_0E/_Private/_Software/namecreater/NameCreater/NameCreater.pro + D:/_0E/_Private/_Software/namecreater/NameCreater/NameCreater.pro + false + true + true + false + true + D:/_0E/_Private/_Software/namecreater/build-NameCreater-Desktop_Qt_5_15_2_MinGW_32_bit-Release/release + D:/_0E/_Private/_Software/namecreater/build-NameCreater-Desktop_Qt_5_15_2_MinGW_32_bit-Release + + 1 + + + + ProjectExplorer.Project.Target.1 + + WebAssemblyDeviceType + Qt 5.15.2 WebAssembly + Qt 5.15.2 WebAssembly + qt.qt5.5152.wasm_32_kit + 1 + -1 + 0 + + 0 + D:\_0E\_Private\_Software\namecreater\build-NameCreater-Qt_5_15_2_WebAssembly-Debug + D:/_0E/_Private/_Software/namecreater/build-NameCreater-Qt_5_15_2_WebAssembly-Debug + + + true + QtProjectManager.QMakeBuildStep + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Debug + Qt4ProjectManager.Qt4BuildConfiguration + 2 + + + D:\_0E\_Private\_Software\namecreater\build-NameCreater-Qt_5_15_2_WebAssembly-Release + D:/_0E/_Private/_Software/namecreater/build-NameCreater-Qt_5_15_2_WebAssembly-Release + + + true + QtProjectManager.QMakeBuildStep + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Release + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + + + 0 + D:\_0E\_Private\_Software\namecreater\build-NameCreater-Qt_5_15_2_WebAssembly-Profile + D:/_0E/_Private/_Software/namecreater/build-NameCreater-Qt_5_15_2_WebAssembly-Profile + + + true + QtProjectManager.QMakeBuildStep + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Profile + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + 0 + + 3 + 0 + + true + true + true + + Launch with emrun + WebAssembly.RunConfiguration.Emrun + + false + true + false + true + chrome + + 1 + + + + ProjectExplorer.Project.TargetCount + 2 + + + ProjectExplorer.Project.Updater.FileVersion + 22 + + + Version + 22 + + diff --git a/NameCreater/NameCreater.ui b/NameCreater/NameCreater.ui index 68d4ca5..b9bbe18 100644 --- a/NameCreater/NameCreater.ui +++ b/NameCreater/NameCreater.ui @@ -11,9 +11,7 @@ - - 華康圓體 Std W8 - + NameCreater @@ -24,15 +22,18 @@ 240 220 - 201 - 91 + 441 + 261 font: 26pt "華康圓體 Std W8"; - TextLabel + + + + :/NameCreater/resource/background.jpg @@ -42,7 +43,7 @@ 0 0 977 - 21 + 22 diff --git a/NameCreater/main.cpp b/NameCreater/main.cpp index bcdc057..8415f72 100644 --- a/NameCreater/main.cpp +++ b/NameCreater/main.cpp @@ -16,7 +16,7 @@ #define BG_MIX_PATH ":/NameCreater/resource/background.jpg" #define BG_BOY_PATH ":/NameCreater/resource/background_boy.jpg" #define BG_GIRL_PATH ":/NameCreater/resource/background_girl.jpg" -#define FONT_NAME QStringLiteral("رd Std W8") +#define FONT_NAME QStringLiteral("DFYuan Std W8") #define FONT_SIZE 120 //#define FONT_SIZE 74 @@ -25,28 +25,28 @@ #define BG_GIRL_TYPE_STR "girl" struct NameInfo_t { - QString name1; - QString name2; - int bg_type; + QString name1; + QString name2; + int bg_type; }; static QPointF BOY_POS[] = { - QPointF(235, 387), QPointF(366, 1433), - QPointF(555, 387), QPointF(692, 1433), - QPointF(878, 387), QPointF(1014, 1433), - QPointF(1200, 387), QPointF(1337, 1433), - QPointF(1527, 387), QPointF(1663, 1433), + QPointF(235, 387), QPointF(366, 1433), + QPointF(555, 387), QPointF(692, 1433), + QPointF(878, 387), QPointF(1014, 1433), + QPointF(1200, 387), QPointF(1337, 1433), + QPointF(1527, 387), QPointF(1663, 1433), }; static int BOY_POS_COUNT = sizeof(BOY_POS) / sizeof(BOY_POS[0]); static QPointF GIRL_POS[] = { - QPointF(1854, 387), QPointF(1987, 1433), - QPointF(2176, 387), QPointF(2314, 1433), - QPointF(2498, 387), QPointF(2635, 1433), - QPointF(2821, 387), QPointF(2958, 1433), - QPointF(3147, 387), QPointF(3285, 1433), + QPointF(1854, 387), QPointF(1987, 1433), + QPointF(2176, 387), QPointF(2314, 1433), + QPointF(2498, 387), QPointF(2635, 1433), + QPointF(2821, 387), QPointF(2958, 1433), + QPointF(3147, 387), QPointF(3285, 1433), }; static int GIRL_POS_COUNT = sizeof(GIRL_POS) / sizeof(GIRL_POS[0]); @@ -54,147 +54,150 @@ static int GIRL_POS_COUNT = sizeof(GIRL_POS) / sizeof(GIRL_POS[0]); void saveToImage(const QString& filename, QGraphicsScene* scene) { - scene->clearSelection(); // Selections would also render to the file - scene->setSceneRect(scene->itemsBoundingRect()); // Re-shrink the scene to it's bounding contents - QImage image(scene->sceneRect().size().toSize(), QImage::Format_ARGB32); // Create the image with the exact size of the shrunk scene - image.fill(Qt::transparent); // Start all pixels transparent - int dpm = 300 / 0.0254; // ~300 DPI - image.setDotsPerMeterX(dpm); - image.setDotsPerMeterY(dpm); + scene->clearSelection(); // Selections would also render to the file + scene->setSceneRect(scene->itemsBoundingRect()); // Re-shrink the scene to it's bounding contents + QImage image(scene->sceneRect().size().toSize(), QImage::Format_ARGB32); // Create the image with the exact size of the shrunk scene + image.fill(Qt::transparent); // Start all pixels transparent + int dpm = 300 / 0.0254; // ~300 DPI + image.setDotsPerMeterX(dpm); + image.setDotsPerMeterY(dpm); - QPainter painter(&image); - scene->render(&painter); + QPainter painter(&image); + scene->render(&painter); - QString folder_name = "export_" + QDateTime::currentDateTime().toString("yyyyMMdd"); + QString folder_name = "export_" + QDateTime::currentDateTime().toString("yyyyMMdd"); - if (!QDir(folder_name).exists()) { - QDir().mkdir(folder_name); - } + if (!QDir(folder_name).exists()) { + QDir().mkdir(folder_name); + } - image.save(QString(folder_name).append("/").append(filename), "JPG", 100); + image.save(QString(folder_name).append("/").append(filename), "JPG", 100); } QList getNameByFile(const QString& filename) { - QList nameList; - QFile file(filename); - if (!file.open(QIODevice::ReadOnly)) { - qDebug() << "Load file failed!"; - return nameList; - } + QList nameList; + QFile file(filename); + if (!file.open(QIODevice::ReadOnly)) { + qDebug() << "Load file failed!"; + return nameList; + } - int row = 0; - while (!file.atEnd()) - { - NameInfo_t info; - QByteArray line = file.readLine(); - QByteArrayList csvList = line.split(','); + int row = 0; + while (!file.atEnd()) + { + NameInfo_t info; + QByteArray line = file.readLine(); + QByteArrayList csvList = line.split(','); - QString name1 = QString::fromLocal8Bit(csvList.at(0)); - QString name2 = QString::fromLocal8Bit(csvList.at(1)); - QString type_str = QString::fromLocal8Bit(csvList.last()); - qDebug() << "row :" << row << " " << name1 << " " << name2; + QString name1 = QString::fromLocal8Bit(csvList.at(0)); + QString name2 = QString::fromLocal8Bit(csvList.at(1)); + QString type_str = QString::fromLocal8Bit(csvList.last()); + qDebug() << "row :" << row << " " << name1 << " " << name2; - if (name1.compare("name_1") == 0 || name2.compare("name_2") == 0) { - continue; - } + if (name1.compare("name_1") == 0 || name2.compare("name_2") == 0) { + continue; + } - info.name1 = name1; - info.name2 = name2; - info.bg_type = type_str.contains(QRegExp("boy")) ? 1 : (type_str.contains(QRegExp("girl"))) ? 2 : 0; + info.name1 = name1; + info.name2 = name2; + info.bg_type = type_str.contains(QRegExp("boy")) ? 1 : (type_str.contains(QRegExp("girl"))) ? 2 : 0; - nameList.append(info); + nameList.append(info); - row++; - } + row++; + } - return nameList; + return nameList; } int main(int argc, char* argv[]) { - int export_times = 0; - //QApplication::setAttribute(Qt::AA_EnableHighDpiScaling); - QApplication a(argc, argv); + int export_times = 0; - QFont font(FONT_NAME); - font.setPixelSize(FONT_SIZE); - QColor font_color(0, 0, 0); + + QApplication a(argc, argv); +// NameCreater w; +// w.show(); + + QFont font(FONT_NAME); + font.setPixelSize(FONT_SIZE); + QColor font_color(0, 0, 0); - QList nameList = getNameByFile("name.csv"); - if (nameList.isEmpty()) { - QMessageBox msgBox; - msgBox.setText(("Name is empty !")); - msgBox.exec(); - } + QList nameList = getNameByFile("name.csv"); + if (nameList.isEmpty()) { + QMessageBox msgBox; + msgBox.setText(("Name is empty !")); + msgBox.exec(); + } - QGraphicsScene scene; - QGraphicsView view(&scene); + QGraphicsScene scene; + QGraphicsView view(&scene); - for (int n = 0; n < nameList.length(); n++) { - //msgBox.setText(QString().sprintf("Export: %d / %d", export_times, nameList.length())); + for (int n = 0; n < nameList.length(); n++) { + //msgBox.setText(QString().sprintf("Export: %d / %d", export_times, nameList.length())); - NameInfo_t name_info = nameList.at(n); + NameInfo_t name_info = nameList.at(n); - scene.clear(); - QImage image((name_info.bg_type == 1) ? BG_BOY_PATH : (name_info.bg_type == 2) ? BG_GIRL_PATH : BG_MIX_PATH); - QGraphicsPixmapItem* bgItem = new QGraphicsPixmapItem(QPixmap::fromImage(image)); - scene.addItem(bgItem); + scene.clear(); + QImage image((name_info.bg_type == 1) ? BG_BOY_PATH : (name_info.bg_type == 2) ? BG_GIRL_PATH : BG_MIX_PATH); + QGraphicsPixmapItem* bgItem = new QGraphicsPixmapItem(QPixmap::fromImage(image)); + scene.addItem(bgItem); - for (int j = 0; j < 2; j++) { - int flag = j % 2; - QString name = (flag == 0) ? name_info.name1 : name_info.name2; - for (int i = 0; i < BOY_POS_COUNT; i++) { - int xscale, yscale; - xscale = yscale = (i % 2 == 1) ? -1 : 1; - QPointF pos = (flag == 0) ? BOY_POS[i] : GIRL_POS[i]; + for (int j = 0; j < 2; j++) { + int flag = j % 2; + QString name = (flag == 0) ? name_info.name1 : name_info.name2; + for (int i = 0; i < BOY_POS_COUNT; i++) { + int xscale, yscale; + xscale = yscale = (i % 2 == 1) ? -1 : 1; + QPointF pos = (flag == 0) ? BOY_POS[i] : GIRL_POS[i]; - QGraphicsTextItem* textItem1 = new QGraphicsTextItem(name.mid(0, 1)); - textItem1->setFont(font); - textItem1->setDefaultTextColor(font_color); - textItem1->setPos(pos); - textItem1->setTransform(QTransform::fromScale(xscale, yscale)); - scene.addItem(textItem1); + QGraphicsTextItem* textItem1 = new QGraphicsTextItem(name.mid(0, 1)); + textItem1->setFont(font); + textItem1->setDefaultTextColor(font_color); + textItem1->setPos(pos); + textItem1->setTransform(QTransform::fromScale(xscale, yscale)); + scene.addItem(textItem1); - QGraphicsTextItem* textItem2 = new QGraphicsTextItem(name.mid(1, 1)); - textItem2->setFont(font); - textItem2->setDefaultTextColor(font_color); - textItem2->setPos(pos.x(), pos.y() + 148 * xscale); - textItem2->setTransform(QTransform::fromScale(xscale, yscale)); - scene.addItem(textItem2); + QGraphicsTextItem* textItem2 = new QGraphicsTextItem(name.mid(1, 1)); + textItem2->setFont(font); + textItem2->setDefaultTextColor(font_color); + textItem2->setPos(pos.x(), pos.y() + 148 * xscale); + textItem2->setTransform(QTransform::fromScale(xscale, yscale)); + scene.addItem(textItem2); - QGraphicsTextItem* textItem3 = new QGraphicsTextItem(name.mid(2, 1)); - textItem3->setFont(font); - textItem3->setDefaultTextColor(font_color); - textItem3->setPos(pos.x(), pos.y() + 294 * xscale); - textItem3->setTransform(QTransform::fromScale(xscale, yscale)); - scene.addItem(textItem3); - } - } - //if (name_info.bg_type == 0) { - // view.show(); - // break; - //} + QGraphicsTextItem* textItem3 = new QGraphicsTextItem(name.mid(2, 1)); + textItem3->setFont(font); + textItem3->setDefaultTextColor(font_color); + textItem3->setPos(pos.x(), pos.y() + 294 * xscale); + textItem3->setTransform(QTransform::fromScale(xscale, yscale)); + scene.addItem(textItem3); + } + } +// if (name_info.bg_type == 0) { +// view.show(); +// break; +// } - QString file_name = QString("%1_%2_%3.jpg").arg(QString::number(export_times+1),name_info.name1,name_info.name2); - saveToImage(file_name, &scene); - export_times++; - } + QString file_name = QString("%1_%2_%3.jpg").arg(QString::number(export_times+1),name_info.name1,name_info.name2); + saveToImage(file_name, &scene); + export_times++; + } - QMessageBox msgBox; - msgBox.setText(QString().sprintf("Export Finshed. Count:%d",export_times)); - msgBox.exec(); + QMessageBox msgBox; + msgBox.setText(QString().asprintf("Export Finshed. Count:%d",export_times)); + msgBox.exec(); - return 0; + return 0; }