build webassembly succeed.

This commit is contained in:
shouchih_chen 2023-04-07 05:57:05 +08:00
parent fc8bb70f56
commit 3942d7f147
4 changed files with 431 additions and 350 deletions

1
.gitignore vendored
View File

@ -5,3 +5,4 @@
/*.db /*.db
/_bin /_bin
/web_build /web_build
/buildwed

View File

@ -3,107 +3,107 @@
#include <QFileDialog> #include <QFileDialog>
#include <QMessageBox> #include <QMessageBox>
#include <QFontDatabase> #include <QFontDatabase>
#include <QTextCodec> #include <QTextCodec>
#include <QGraphicsScene> #include <QGraphicsScene>
#include <QGraphicsView> #include <QGraphicsView>
#include <QGraphicsPixmapItem> #include <QGraphicsPixmapItem>
#include <QDateTime> #include <QDateTime>
#include <QBuffer> #include <QBuffer>
//#define BG_SAMPLE_PATH ":/NameCreater/resource/background_sample.jpg" //#define BG_SAMPLE_PATH ":/NameCreater/resource/background_sample.jpg"
#define BG_SAMPLE_PATH ":/NameCreater/resource/background_number_smaple.jpg" #define BG_SAMPLE_PATH ":/NameCreater/resource/background_number_smaple.jpg"
#define BG_PATH_FORMAT ":/NameCreater/resource/background_%1.jpg" #define BG_PATH_FORMAT ":/NameCreater/resource/background_%1.jpg"
#define FONT_NAME "DFYuanStd-W8.otf" #define FONT_NAME "DFYuanStd-W8.otf"
#define FONT_PATH ":/NameCreater/_exp/DFYuanStd-W8.otf" #define FONT_PATH ":/NameCreater/_exp/DFYuanStd-W8.otf"
#define FONT_SIZE 120 #define FONT_SIZE 120
//#define FONT_SIZE 74 //#define FONT_SIZE 74
#define BG_MIX_TYPE_STR "mix" #define BG_MIX_TYPE_STR "mix"
#define BG_BOY_TYPE_STR "boy" #define BG_BOY_TYPE_STR "boy"
#define BG_GIRL_TYPE_STR "girl" #define BG_GIRL_TYPE_STR "girl"
#define VERSION "v1.2.0"
struct NameInfo_t {
QString name1;
QString name2;
QString bg_path;
bool is_number_bg;
};
static QPointF BG_POS[] = {
QPointF(159, 61), QPointF(482, 61), QPointF(802, 61),
QPointF(1122, 61), QPointF(1449, 61), QPointF(1772, 61),
QPointF(2095, 61), QPointF(2414, 61), QPointF(2738, 61),
QPointF(3060, 61), QPointF(900, 2094), QPointF(900, 2420),
};
static int BG_POS_COUNT = sizeof(BG_POS) / sizeof(BG_POS[0]);
struct NameInfo_t { static QPointF NAME_POS[] = {
QString name1; QPointF(240, 430), QPointF(372, 1402),
QString name2; QPointF(564, 430), QPointF(694, 1402),
QString bg_path; QPointF(883, 430), QPointF(1014, 1402),
bool is_number_bg; QPointF(1205, 430), QPointF(1337, 1402),
}; QPointF(1532, 430), QPointF(1663, 1402),
QPointF(1854, 430), QPointF(1987, 1402),
static QPointF BG_POS[] = { QPointF(2176, 430), QPointF(2309, 1402),
QPointF(159, 61), QPointF(482, 61), QPointF(802, 61), QPointF(2498, 430), QPointF(2629, 1402),
QPointF(1122, 61), QPointF(1449, 61), QPointF(1772, 61), QPointF(2821, 430), QPointF(2952, 1402),
QPointF(2095, 61), QPointF(2414, 61), QPointF(2738, 61), QPointF(3145, 430), QPointF(3276, 1402),
QPointF(3060, 61), QPointF(900, 2094), QPointF(900, 2420), QPointF(1268, 2012), QPointF(2240, 1880),
}; QPointF(1268, 2334), QPointF(2240, 2202),
};
static int BG_POS_COUNT = sizeof(BG_POS) / sizeof(BG_POS[0]);
static QPointF NAME_POS_NUMBER[] = {
QPointF(240, 370), QPointF(372, 1442),
static QPointF NAME_POS[] = { QPointF(564, 370), QPointF(694, 1442),
QPointF(240, 430), QPointF(372, 1402), QPointF(883, 370), QPointF(1014, 1442),
QPointF(564, 430), QPointF(694, 1402), QPointF(1205, 370), QPointF(1337, 1442),
QPointF(883, 430), QPointF(1014, 1402), QPointF(1532, 370), QPointF(1663, 1442),
QPointF(1205, 430), QPointF(1337, 1402), QPointF(1854, 370), QPointF(1987, 1442),
QPointF(1532, 430), QPointF(1663, 1402), QPointF(2176, 370), QPointF(2309, 1442),
QPointF(1854, 430), QPointF(1987, 1402), QPointF(2498, 370), QPointF(2629, 1442),
QPointF(2176, 430), QPointF(2309, 1402), QPointF(2821, 370), QPointF(2952, 1442),
QPointF(2498, 430), QPointF(2629, 1402), QPointF(3145, 370), QPointF(3276, 1442),
QPointF(2821, 430), QPointF(2952, 1402), QPointF(1228, 2012), QPointF(2280, 1880),
QPointF(3145, 430), QPointF(3276, 1402), QPointF(1228, 2334), QPointF(2280, 2202),
QPointF(1268, 2012), QPointF(2240, 1880), };
QPointF(1268, 2334), QPointF(2240, 2202),
};
static QPointF NAME_POS_NUMBER[] = {
QPointF(240, 370), QPointF(372, 1442),
QPointF(564, 370), QPointF(694, 1442),
QPointF(883, 370), QPointF(1014, 1442),
QPointF(1205, 370), QPointF(1337, 1442),
QPointF(1532, 370), QPointF(1663, 1442),
QPointF(1854, 370), QPointF(1987, 1442),
QPointF(2176, 370), QPointF(2309, 1442),
QPointF(2498, 370), QPointF(2629, 1442),
QPointF(2821, 370), QPointF(2952, 1442),
QPointF(3145, 370), QPointF(3276, 1442),
QPointF(1228, 2012), QPointF(2280, 1880),
QPointF(1228, 2334), QPointF(2280, 2202),
};
static int NAME_POS_COUNT = sizeof(NAME_POS) / sizeof(NAME_POS[0]); static int NAME_POS_COUNT = sizeof(NAME_POS) / sizeof(NAME_POS[0]);
void saveToImage(const QString& filename, QGraphicsScene* scene) {
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 scene->clearSelection(); // Selections would also render to the file
QImage image(scene->sceneRect().size().toSize(), QImage::Format_ARGB32); // Create the image with the exact size of the shrunk scene scene->setSceneRect(scene->itemsBoundingRect()); // Re-shrink the scene to it's bounding contents
image.fill(Qt::transparent); // Start all pixels transparent QImage image(scene->sceneRect().size().toSize(), QImage::Format_ARGB32); // Create the image with the exact size of the shrunk scene
int dpm = 300 / 0.0254; // ~300 DPI image.fill(Qt::transparent); // Start all pixels transparent
image.setDotsPerMeterX(dpm); int dpm = 300 / 0.0254; // ~300 DPI
image.setDotsPerMeterY(dpm); image.setDotsPerMeterX(dpm);
image.setDotsPerMeterY(dpm);
QPainter painter(&image);
scene->render(&painter); QPainter painter(&image);
scene->render(&painter);
#ifdef Q_OS_MAC
QString folder_name = QCoreApplication::applicationDirPath() + "/../../../export_" + QDateTime::currentDateTime().toString("yyyyMMdd"); #ifdef Q_OS_MAC
#else QString folder_name = QCoreApplication::applicationDirPath() + "/../../../export_" + QDateTime::currentDateTime().toString("yyyyMMdd");
QString folder_name = QCoreApplication::applicationDirPath() + "/export_" + QDateTime::currentDateTime().toString("yyyyMMdd"); #else
#endif QString folder_name = QCoreApplication::applicationDirPath() + "/export_" + QDateTime::currentDateTime().toString("yyyyMMdd");
#endif
/*qDebug() << "folder_name :" << folder_name;
if (!QDir(folder_name).exists()) { /*qDebug() << "folder_name :" << folder_name;
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);*/
; // obtained from e.g. QImage::save() ; // obtained from e.g. QImage::save()
@ -114,243 +114,243 @@ void saveToImage(const QString& filename, QGraphicsScene* scene) {
QPixmap pixmap = QPixmap::fromImage(image); QPixmap pixmap = QPixmap::fromImage(image);
pixmap.save(&buffer, "JPEG",100); // You can also use other formats like "JPEG" or "BMP" pixmap.save(&buffer, "JPEG",100); // You can also use other formats like "JPEG" or "BMP"
QFileDialog::saveFileContent(imageData, filename); QFileDialog::saveFileContent(imageData, filename);
} }
QList<NameInfo_t> getNameByFile(const QString& filename) { QList<NameInfo_t> getNameByFile(const QString& filename) {
QList<NameInfo_t> nameList; QList<NameInfo_t> nameList;
#ifdef Q_OS_MAC #ifdef Q_OS_MAC
QString root_path = QCoreApplication::applicationDirPath() + "/../../../"; QString root_path = QCoreApplication::applicationDirPath() + "/../../../";
#else #else
QString root_path = "";//QCoreApplication::applicationDirPath() + "/"; QString root_path = "";//QCoreApplication::applicationDirPath() + "/";
#endif #endif
QFile file(filename); QFile file(filename);
if (!file.open(QIODevice::ReadOnly)) { if (!file.open(QIODevice::ReadOnly)) {
QMessageBox msgBox; QMessageBox msgBox;
msgBox.setText(QString("Load file failed!").append(filename)); msgBox.setText(QString("Load file failed!").append(filename));
msgBox.exec(); msgBox.exec();
file.close(); file.close();
return nameList; return nameList;
} }
int row = 0; int row = 0;
QTextCodec* tc = QTextCodec::codecForName("Big5"); QTextCodec* tc = QTextCodec::codecForName("Big5");
while (!file.atEnd()) while (!file.atEnd())
{ {
NameInfo_t info; NameInfo_t info;
QByteArray line = file.readLine(); QByteArray line = file.readLine();
QString name_tc = tc->toUnicode(line); QString name_tc = tc->toUnicode(line);
QStringList csvList = name_tc.split(','); QStringList csvList = name_tc.split(',');
QString name1 = csvList.at(0); QString name1 = csvList.at(0);
QString type_str = csvList.last();//QString::fromLocal8Bit(csvList.last()); QString type_str = csvList.last();//QString::fromLocal8Bit(csvList.last());
qDebug() << "row :" << row << " " << name1; qDebug() << "row :" << row << " " << name1;
type_str = type_str.remove(QRegExp("\r")); type_str = type_str.remove(QRegExp("\r"));
type_str = type_str.remove(QRegExp("\n")); type_str = type_str.remove(QRegExp("\n"));
if (name1.compare("name_1") == 0) { if (name1.compare("name_1") == 0) {
continue; continue;
} }
info.name1 = name1; info.name1 = name1;
info.bg_path = QString(BG_PATH_FORMAT).arg(type_str); info.bg_path = QString(BG_PATH_FORMAT).arg(type_str);
info.is_number_bg = type_str[0].isDigit(); info.is_number_bg = type_str[0].isDigit();
nameList.append(info); nameList.append(info);
row++; row++;
} }
file.close(); file.close();
return nameList; return nameList;
} }
QList<NameInfo_t> getNameByFileContent(const QByteArray& conetent) { QList<NameInfo_t> getNameByFileContent(const QByteArray& conetent) {
QList<NameInfo_t> nameList; QList<NameInfo_t> nameList;
QTextCodec* tc = QTextCodec::codecForName("Big5"); QTextCodec* tc = QTextCodec::codecForName("Big5");
QString codec = tc->toUnicode(conetent.data()); QString codec = tc->toUnicode(conetent.data());
QTextStream stream(&codec); QTextStream stream(&codec);
int row = 0; int row = 0;
while (!stream.atEnd()) while (!stream.atEnd())
{ {
NameInfo_t info; NameInfo_t info;
QString line = stream.readLine(); QString line = stream.readLine();
QString name_tc = line; QString name_tc = line;
QStringList csvList = name_tc.split(','); QStringList csvList = name_tc.split(',');
QString name1 = csvList.at(0); QString name1 = csvList.at(0);
QString type_str = csvList.last();//QString::fromLocal8Bit(csvList.last()); QString type_str = csvList.last();//QString::fromLocal8Bit(csvList.last());
qDebug() << "row :" << row << " " << name1; qDebug() << "row :" << row << " " << name1;
type_str = type_str.remove(QRegExp("\r")); type_str = type_str.remove(QRegExp("\r"));
type_str = type_str.remove(QRegExp("\n")); type_str = type_str.remove(QRegExp("\n"));
if (name1.compare("name_1") == 0) { if (name1.compare("name_1") == 0) {
continue; continue;
} }
info.name1 = name1; info.name1 = name1;
info.bg_path = QString(BG_PATH_FORMAT).arg(type_str); info.bg_path = QString(BG_PATH_FORMAT).arg(type_str);
info.is_number_bg = type_str[0].isDigit(); info.is_number_bg = type_str[0].isDigit();
nameList.append(info); nameList.append(info);
row++; row++;
} }
return nameList; return nameList;
} }
void processCSV(const QString& filename, const QByteArray& filecontent, const QFont& font, const QColor& font_color) { void processCSV(const QString& filename, const QByteArray& filecontent, const QFont& font, const QColor& font_color) {
int export_times = 0; int export_times = 0;
//QList<NameInfo_t> nameList = getNameByFile(filename); //QList<NameInfo_t> nameList = getNameByFile(filename);
QList<NameInfo_t> nameList = getNameByFileContent(filecontent); QList<NameInfo_t> nameList = getNameByFileContent(filecontent);
if (nameList.isEmpty()) { if (nameList.isEmpty()) {
QMessageBox msgBox; QMessageBox msgBox;
msgBox.setText(QString("Name is empty ! ").append(filename)); msgBox.setText(QString("Name is empty ! ").append(filename));
msgBox.exec(); msgBox.exec();
} }
QGraphicsScene scene; QGraphicsScene scene;
scene.setBackgroundBrush(QBrush(QColor(255, 255, 255))); scene.setBackgroundBrush(QBrush(QColor(255, 255, 255)));
QGraphicsView view(&scene); QGraphicsView view(&scene);
/*QImage image(BG_SAMPLE_PATH); /*QImage image(BG_SAMPLE_PATH);
QGraphicsPixmapItem* bgItem = new QGraphicsPixmapItem(QPixmap::fromImage(image)); QGraphicsPixmapItem* bgItem = new QGraphicsPixmapItem(QPixmap::fromImage(image));
scene.addItem(bgItem);*/ scene.addItem(bgItem);*/
for (int n = 0; n < nameList.length(); n++) { for (int n = 0; n < nameList.length(); n++) {
int idx = n % BG_POS_COUNT; int idx = n % BG_POS_COUNT;
NameInfo_t name_info = nameList.at(n); NameInfo_t name_info = nameList.at(n);
QImage name_image(name_info.bg_path); QImage name_image(name_info.bg_path);
if (idx == 0) { if (idx == 0) {
QGraphicsRectItem* bg_item = new QGraphicsRectItem(0, 0, 3508, 2482); QGraphicsRectItem* bg_item = new QGraphicsRectItem(0, 0, 3508, 2482);
bg_item->setBrush(QBrush(QColor(255, 255, 255))); bg_item->setBrush(QBrush(QColor(255, 255, 255)));
scene.addItem(bg_item); scene.addItem(bg_item);
} }
QGraphicsPixmapItem* name_bgItem = new QGraphicsPixmapItem(QPixmap::fromImage(name_image)); QGraphicsPixmapItem* name_bgItem = new QGraphicsPixmapItem(QPixmap::fromImage(name_image));
bool rot = (idx == 10 || idx == 11); bool rot = (idx == 10 || idx == 11);
name_bgItem->setRotation(rot ? -90 : 0); name_bgItem->setRotation(rot ? -90 : 0);
name_bgItem->setPos(BG_POS[idx]); name_bgItem->setPos(BG_POS[idx]);
scene.addItem(name_bgItem); scene.addItem(name_bgItem);
if (name_info.name1.isEmpty()) { if (name_info.name1.isEmpty()) {
QMessageBox msgBox; QMessageBox msgBox;
msgBox.setText(QString().asprintf("Name is Empty at %d", export_times + 1)); msgBox.setText(QString().asprintf("Name is Empty at %d", export_times + 1));
msgBox.exec(); msgBox.exec();
} }
QString name = name_info.name1; QString name = name_info.name1;
int name_len = name.length(); int name_len = name.length();
for (int j = 0; j < 2; j++) { for (int j = 0; j < 2; j++) {
int pos_idx = idx * 2 + j; int pos_idx = idx * 2 + j;
int xscale, yscale; int xscale, yscale;
xscale = yscale = (j == 1) ? -1 : 1; xscale = yscale = (j == 1) ? -1 : 1;
QPointF pos = name_info.is_number_bg ? NAME_POS_NUMBER[pos_idx] : NAME_POS[pos_idx]; QPointF pos = name_info.is_number_bg ? NAME_POS_NUMBER[pos_idx] : NAME_POS[pos_idx];
int y_offset[2] = { 0 }; int y_offset[2] = { 0 };
if (name_len == 2) { if (name_len == 2) {
if (!rot) { if (!rot) {
pos.setY(pos.y() + 82 * xscale); pos.setY(pos.y() + 82 * xscale);
} }
else { else {
pos.setX(pos.x() + 82 * xscale); pos.setX(pos.x() + 82 * xscale);
} }
y_offset[0] = 25; y_offset[0] = 25;
} }
QGraphicsTextItem* textItem1 = new QGraphicsTextItem(name.mid(0, 1)); QGraphicsTextItem* textItem1 = new QGraphicsTextItem(name.mid(0, 1));
textItem1->setFont(font); textItem1->setFont(font);
textItem1->setDefaultTextColor(font_color); textItem1->setDefaultTextColor(font_color);
if (!rot) { if (!rot) {
textItem1->setPos(pos); textItem1->setPos(pos);
textItem1->setTransform(QTransform::fromScale(xscale, yscale)); textItem1->setTransform(QTransform::fromScale(xscale, yscale));
} }
else { else {
textItem1->setPos(pos); textItem1->setPos(pos);
textItem1->setRotation(-90); textItem1->setRotation(-90);
textItem1->setTransform(QTransform::fromScale(xscale, yscale)); textItem1->setTransform(QTransform::fromScale(xscale, yscale));
} }
scene.addItem(textItem1); scene.addItem(textItem1);
QGraphicsTextItem* textItem2 = new QGraphicsTextItem(name.mid(1, 1)); QGraphicsTextItem* textItem2 = new QGraphicsTextItem(name.mid(1, 1));
textItem2->setFont(font); textItem2->setFont(font);
textItem2->setDefaultTextColor(font_color); textItem2->setDefaultTextColor(font_color);
if (!rot) { if (!rot) {
textItem2->setPos(pos.x(), pos.y() + (145 + y_offset[0]) * xscale); textItem2->setPos(pos.x(), pos.y() + (145 + y_offset[0]) * xscale);
textItem2->setTransform(QTransform::fromScale(xscale, yscale)); textItem2->setTransform(QTransform::fromScale(xscale, yscale));
} }
else { else {
textItem2->setPos(pos.x() + (145 + y_offset[0]) * xscale, pos.y()); textItem2->setPos(pos.x() + (145 + y_offset[0]) * xscale, pos.y());
textItem2->setRotation(-90); textItem2->setRotation(-90);
textItem2->setTransform(QTransform::fromScale(xscale, yscale)); textItem2->setTransform(QTransform::fromScale(xscale, yscale));
} }
scene.addItem(textItem2); scene.addItem(textItem2);
if (name_len > 2) { if (name_len > 2) {
QGraphicsTextItem* textItem3 = new QGraphicsTextItem(name.mid(2, 1)); QGraphicsTextItem* textItem3 = new QGraphicsTextItem(name.mid(2, 1));
textItem3->setFont(font); textItem3->setFont(font);
textItem3->setDefaultTextColor(font_color); textItem3->setDefaultTextColor(font_color);
if (!rot) { if (!rot) {
textItem3->setPos(pos.x(), pos.y() + 290 * xscale); textItem3->setPos(pos.x(), pos.y() + 290 * xscale);
textItem3->setTransform(QTransform::fromScale(xscale, yscale)); textItem3->setTransform(QTransform::fromScale(xscale, yscale));
} }
else { else {
textItem3->setPos(pos.x() + 290 * xscale, pos.y()); textItem3->setPos(pos.x() + 290 * xscale, pos.y());
textItem3->setRotation(-90); textItem3->setRotation(-90);
textItem3->setTransform(QTransform::fromScale(xscale, yscale)); textItem3->setTransform(QTransform::fromScale(xscale, yscale));
} }
scene.addItem(textItem3); scene.addItem(textItem3);
} }
} }
bool is_export_page = ((idx + 1) % BG_POS_COUNT == 0); bool is_export_page = ((idx + 1) % BG_POS_COUNT == 0);
if (is_export_page || n == nameList.count() - 1) { if (is_export_page || n == nameList.count() - 1) {
QString file_name = QString("%1_.jpg").arg(QString::number(export_times + 1)); QString file_name = QString("%1_.jpg").arg(QString::number(export_times + 1));
saveToImage(file_name, &scene); saveToImage(file_name, &scene);
export_times++; export_times++;
scene.clear(); scene.clear();
} }
} }
QMessageBox msgBox; QMessageBox msgBox;
msgBox.setText(QString().asprintf("Export Finshed. Count:%d", export_times)); msgBox.setText(QString().asprintf("Export Finshed. Count:%d", export_times));
msgBox.exec(); msgBox.exec();
} }
@ -360,23 +360,32 @@ NameCreater::NameCreater(QWidget *parent)
ui.setupUi(this); ui.setupUi(this);
connect(ui.openfile_btn, &QPushButton::released, this, &NameCreater::OnClickedReadBtn); connect(ui.openfile_btn, &QPushButton::released, this, &NameCreater::OnClickedReadBtn);
QString font_path = FONT_PATH; //root_path.append(FONT_NAME); QString font_path = FONT_PATH; //root_path.append(FONT_NAME);
QFile font_res(font_path); QFile font_res(font_path);
if (!font_res.open(QIODevice::ReadOnly)) { if (!font_res.open(QIODevice::ReadOnly)) {
QMessageBox msgBox; QMessageBox msgBox;
msgBox.setText("Can not load font file!" + font_path); msgBox.setText("Can not load font file!" + font_path);
msgBox.exec(); msgBox.exec();
font_res.close(); font_res.close();
} }
int id = QFontDatabase::addApplicationFontFromData(font_res.readAll()); int id = QFontDatabase::addApplicationFontFromData(font_res.readAll());
QStringList family_list = QFontDatabase::applicationFontFamilies(id); QStringList family_list = QFontDatabase::applicationFontFamilies(id);
font = QFont(family_list.at(0)); font = QFont(family_list.at(0));
font.setPixelSize(FONT_SIZE); font.setPixelSize(FONT_SIZE);
font_color = QColor(0, 0, 0); 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);
font_res.close(); font_res.close();
qDebug() << ui.label->font().family(); qDebug() << ui.label->font().family();

View File

@ -6,8 +6,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>977</width> <width>532</width>
<height>716</height> <height>458</height>
</rect> </rect>
</property> </property>
<property name="font"> <property name="font">
@ -47,8 +47,8 @@ background-color: rgb(0, 0, 0);
<widget class="QPushButton" name="openfile_btn"> <widget class="QPushButton" name="openfile_btn">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>70</x> <x>80</x>
<y>50</y> <y>100</y>
<width>181</width> <width>181</width>
<height>161</height> <height>161</height>
</rect> </rect>
@ -57,13 +57,71 @@ background-color: rgb(0, 0, 0);
<string>Open File</string> <string>Open File</string>
</property> </property>
</widget> </widget>
<widget class="QLabel" name="tital_label">
<property name="geometry">
<rect>
<x>50</x>
<y>20</y>
<width>261</width>
<height>71</height>
</rect>
</property>
<property name="font">
<font>
<family>Yu Gothic UI</family>
<pointsize>20</pointsize>
<weight>50</weight>
<italic>false</italic>
<bold>false</bold>
</font>
</property>
<property name="styleSheet">
<string notr="true">color: rgb(255, 255, 255);
</string>
</property>
<property name="text">
<string>五入組拆成單入產生器</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
<widget class="QLabel" name="version_label">
<property name="geometry">
<rect>
<x>50</x>
<y>60</y>
<width>261</width>
<height>41</height>
</rect>
</property>
<property name="font">
<font>
<family>Yu Gothic UI</family>
<pointsize>10</pointsize>
<weight>50</weight>
<italic>false</italic>
<bold>false</bold>
</font>
</property>
<property name="styleSheet">
<string notr="true">color: rgb(255, 255, 255);
</string>
</property>
<property name="text">
<string>五入組拆成單入產生器</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</widget> </widget>
<widget class="QMenuBar" name="menuBar"> <widget class="QMenuBar" name="menuBar">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>977</width> <width>532</width>
<height>21</height> <height>21</height>
</rect> </rect>
</property> </property>

View File

@ -1,13 +1,26 @@
name_1,bg_type name_1,bg_type
ヲ网pィF,1 ヲ网pィF,1
ョL、p,2 ョL、p,2
吳苡需,y 吳苡需,3
尹小,y 尹小,4
艾小,r 艾小,5
ョL、p,g ョL、p,g
ァdミw,b ァdミw,b
、ィ、p,y 、ィ、p,y
ヲ网p,r ヲ网p,r
ョL、p,g ョL、p,g
艾小,2 艾小,6
夏小天,1 夏小天,7
艾小沙,8
夏小,9
吳苡需,10
陳守志,11
陳宣愉,12
吳佳鈴,13
陳守志,14
陳宣愉,15
吳佳鈴,16
陳守志,17
陳宣愉,18
吳佳鈴,19
艾小沙,20

1 name_1 bg_type
2 艾小沙 1
3 夏小 2
4 吳苡需 y 3
5 尹小 y 4
6 艾小 r 5
7 夏小 g
8 吳苡 b
9 尹小 y
10 艾小 r
11 夏小 g
12 艾小 2 6
13 夏小天 1 7
14 艾小沙 8
15 夏小 9
16 吳苡需 10
17 陳守志 11
18 陳宣愉 12
19 吳佳鈴 13
20 陳守志 14
21 陳宣愉 15
22 吳佳鈴 16
23 陳守志 17
24 陳宣愉 18
25 吳佳鈴 19
26 艾小沙 20