From 40d41b36e20803fdadf138c1aa006d34bba3a238 Mon Sep 17 00:00:00 2001 From: shouchih_chen Date: Thu, 26 Sep 2024 15:20:20 +0800 Subject: [PATCH] 1. Add custom logo can export double name 2. add color selector for custom logo. --- NameCreater/customlogo.cpp | 208 ++++++++++++++++++++++-------------- NameCreater/customlogo.h | 1 + NameCreater/customlogo.ui | 36 +++++++ NameCreater/customlogo2.cpp | 5 +- 4 files changed, 163 insertions(+), 87 deletions(-) diff --git a/NameCreater/customlogo.cpp b/NameCreater/customlogo.cpp index 9a3e825..b2741ae 100644 --- a/NameCreater/customlogo.cpp +++ b/NameCreater/customlogo.cpp @@ -9,79 +9,104 @@ #include #include #include +#include -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]); - +static QPointF BG_POS_START = QPointF(159, 61); +static QPointF BG_POS_ROT_START = QPointF(900, 2094); +static qreal BG_WIDTH_OFFSET = 320; +static int NAME_COUNT_IN_PAGE = 12; static QPointF NAME_OFFSET_START = QPointF(79, 377); static qreal EACH_WORD_OFFSET = 142; - static QColor FONT_COLOR = QColor(0, 0, 0); -CustomLogo::CustomLogo(QFont* font, QDialog* parent): - QDialog(parent), - ui(new Ui::CustomLogo), - customFont(font) -{ - ui->setupUi(this); - - connect(ui->load_bg_btn, &QPushButton::released,this, &CustomLogo::onClickedBtn); - connect(ui->load_list_btn, &QPushButton::released, this, &CustomLogo::onClickedBtn); + +class QGraphicsCloneTextItem : public QGraphicsTextItem { +public: + QGraphicsCloneTextItem(const QString& text, QGraphicsItem* parent = nullptr) : + QGraphicsTextItem(text, parent) { + + } + + QGraphicsCloneTextItem* clone(QGraphicsItem* parent = nullptr) const { + + QGraphicsCloneTextItem* newItem = new QGraphicsCloneTextItem(toPlainText(), parent); + newItem->setFont(font()); + newItem->setPos(pos()); + newItem->setDefaultTextColor(defaultTextColor()); + return newItem; + } + +}; + + + +CustomLogo::CustomLogo(QFont* font, QDialog* parent) : + QDialog(parent), + ui(new Ui::CustomLogo), + customFont(font), + fontColor(QColor(0, 0, 0)) +{ + ui->setupUi(this); + + + connect(ui->load_bg_btn, &QPushButton::released, this, &CustomLogo::onClickedBtn); + connect(ui->load_list_btn, &QPushButton::released, this, &CustomLogo::onClickedBtn); + connect(ui->color_btn, &QPushButton::released, this, &CustomLogo::onClickedBtn); + + QPalette palette = ui->color_label->palette(); + palette.setColor(QPalette::WindowText, fontColor); + ui->color_label->setPalette(palette); } CustomLogo::~CustomLogo() { - delete ui; + delete ui; } void CustomLogo::loadBGFromFile() { - auto fileContentReady = [this](const QString& fileName, const QByteArray& fileContent) { - if (fileName.isEmpty()) { - // No file was selected - }else{ - QPixmap pix; - if(pix.loadFromData(fileContent,"JPG")) { - ui->display_label->setPixmap(pix); - }else{ - qDebug()<<"Data content not image format"; - } - } - }; + auto fileContentReady = [this](const QString& fileName, const QByteArray& fileContent) { + if (fileName.isEmpty()) { + // No file was selected + } + else { + QPixmap pix; + if (pix.loadFromData(fileContent, "JPG")) { + ui->display_label->setPixmap(pix); + } + else { + qDebug() << "Data content not image format"; + } + } + }; - QFileDialog::getOpenFileContent("Image (*.jpg)", fileContentReady); + QFileDialog::getOpenFileContent("Image (*.jpg)", fileContentReady); } void CustomLogo::loadListFromFile() { - auto fileContentReady = [this](const QString& fileName, const QByteArray& fileContent) { - if (fileName.isEmpty()) { - // No file was selected - } - else { + auto fileContentReady = [this](const QString& fileName, const QByteArray& fileContent) { + if (fileName.isEmpty()) { + // No file was selected + } + else { QList nameList = getNameByFileContent(Name_zh, fileContent); if (!nameList.isEmpty()) { - qDebug() << "List size: "<< QString::number(nameList.count()); + qDebug() << "List size: " << QString::number(nameList.count()); gerneraImageFromList(nameList, Name_zh); } else { qDebug() << "List is empty!!"; } - } + } - }; + }; - QFileDialog::getOpenFileContent("CSV file (*.csv)", fileContentReady); + QFileDialog::getOpenFileContent("CSV file (*.csv)", fileContentReady); } @@ -96,9 +121,9 @@ void CustomLogo::gerneraImageFromList(const QList& nameList, Name_Ty case Name_zh: { for (int n = 0; n < nameList.length(); n++) { - int idx = n % BG_POS_COUNT; + int idx = n % NAME_COUNT_IN_PAGE; NameInfo_t name_info = nameList.at(n); - + if (idx == 0) { QGraphicsRectItem* bg_item = new QGraphicsRectItem(0, 0, BG_WIDTH, BG_HEIGHT); @@ -112,12 +137,14 @@ void CustomLogo::gerneraImageFromList(const QList& nameList, Name_Ty QPixmap _bg = ui->display_label->pixmap().copy(); #endif // - - QGraphicsPixmapItem* name_bgItem = new QGraphicsPixmapItem(_bg); + + QGraphicsPixmapItem* name_bgItem = new QGraphicsPixmapItem(_bg); bool rot = (idx == 10 || idx == 11); name_bgItem->setRotation(rot ? -90 : 0); - name_bgItem->setPos(BG_POS[idx]); + qreal item_pos_x = rot ? BG_POS_ROT_START.x() : BG_POS_START.x() + idx * BG_WIDTH_OFFSET; + qreal item_pos_y = rot ? BG_POS_ROT_START.y() + (idx - 10) * BG_WIDTH_OFFSET : BG_POS_START.y(); + name_bgItem->setPos(item_pos_x, item_pos_y); scene.addItem(name_bgItem); @@ -126,40 +153,44 @@ void CustomLogo::gerneraImageFromList(const QList& nameList, Name_Ty msgBox.setText(QString().asprintf("Name is Empty at %d", export_times + 1)); msgBox.exec(); } + QGraphicsRectItem* name_rectItem = new QGraphicsRectItem(QRectF(0, 0, name_bgItem->boundingRect().width(), name_bgItem->boundingRect().height()/2), name_bgItem); + name_rectItem->setPen(QPen(QColor(0, 0, 0, 0))); + QString name = name_info.name1; int name_len = name.length(); - for (int j = 0; j < 1; j++) { // never reverse - qreal xscale, yscale; - - xscale = yscale = (j == 1) ? -1 : 1; - QPointF pos = NAME_OFFSET_START; - qreal y_offset = 0; - if (name_len == 2) { - if (!rot) { - pos.setY(pos.y() + 82.0 * xscale); - } - else { - pos.setX(pos.x() + 82.0 * xscale); - - } - y_offset = 25; - } - - for (int k = 0; k < name_len; k++) { - QGraphicsTextItem* textItem = new QGraphicsTextItem(name.mid(k, 1), name_bgItem); - textItem->setFont(*customFont); - textItem->setDefaultTextColor(FONT_COLOR); - textItem->setPos(pos.x(),pos.y() + k* EACH_WORD_OFFSET + y_offset); - textItem->setTransform(QTransform::fromScale(xscale, yscale)); - scene.addItem(textItem); - } + QPointF pos = NAME_OFFSET_START; + qreal y_offset = 0; + if (name_len == 2) { + pos.setY(pos.y() + 82.0 ); + y_offset = 25; } - bool is_export_page = ((idx + 1) % BG_POS_COUNT == 0); + + for (int k = 0; k < name_len; k++) { + QGraphicsCloneTextItem* textItem = new QGraphicsCloneTextItem(name.mid(k, 1), name_rectItem); + textItem->setFont(*customFont); + textItem->setDefaultTextColor(fontColor); + textItem->setPos(pos.x(), pos.y() + k * EACH_WORD_OFFSET + y_offset); + } + + + if (ui->double_checkbox->isChecked()) { + QGraphicsRectItem* name_reverse_rectItem = new QGraphicsRectItem(name_rectItem->rect(), name_bgItem); + name_reverse_rectItem->setPen(QPen(QColor(0, 0, 0, 0))); + name_reverse_rectItem->setPos(name_bgItem->boundingRect().width(), name_bgItem->boundingRect().height()); + foreach(auto item, name_rectItem->childItems()) { + QGraphicsCloneTextItem* _ti = ((QGraphicsCloneTextItem*)item)->clone(name_reverse_rectItem); + } + name_reverse_rectItem->setRotation(180); + qDebug() << "name_rect item child count:" << name_rectItem->childItems().size(); + } + + + bool is_export_page = ((idx + 1) % NAME_COUNT_IN_PAGE == 0); if (is_export_page || n == nameList.count() - 1) { QString date_str = QDateTime::currentDateTime().toString("MMddhhmm"); QString file_name = QString("Signal_%2_%1.jpg").arg(QString::number(export_times + 1), date_str); - //saveToImage(file_name, &scene); - INameCreater().saveToImage(file_name, &scene); + //saveToImage(file_name, &scene); + INameCreater().saveToImage(file_name, &scene); export_times++; scene.clear(); @@ -208,7 +239,7 @@ QList CustomLogo::getNameByFileContent(Name_Type_e type, const QByte qDebug() << "row :" << row << " " << name; if (name.compare("name_1") == 0 || name.compare("name") == 0 || - eng_name.compare("eng_name") == 0 ) { + eng_name.compare("eng_name") == 0) { //pass first line continue; } @@ -224,14 +255,25 @@ QList CustomLogo::getNameByFileContent(Name_Type_e type, const QByte void CustomLogo::onClickedBtn() { - auto sender = (QPushButton*)QObject::sender(); + auto sender = (QPushButton*)QObject::sender(); - if (sender == ui->load_bg_btn) { - loadBGFromFile(); - } - else if (sender == ui->load_list_btn) { - loadListFromFile(); - } + if (sender == ui->load_bg_btn) { + loadBGFromFile(); + } + else if (sender == ui->load_list_btn) { + loadListFromFile(); + } + else if (sender == ui->color_btn) { + + QColor color = QColorDialog::getColor(Qt::red, this); + + if (color.isValid()) { + fontColor = color; + QPalette palette = ui->color_label->palette(); + palette.setColor(QPalette::WindowText, color); + ui->color_label->setPalette(palette); + } + } } diff --git a/NameCreater/customlogo.h b/NameCreater/customlogo.h index ccadc82..21ef83d 100644 --- a/NameCreater/customlogo.h +++ b/NameCreater/customlogo.h @@ -20,6 +20,7 @@ public: private: Ui::CustomLogo *ui; QFont* customFont; + QColor fontColor; void loadBGFromFile(); void loadListFromFile(); diff --git a/NameCreater/customlogo.ui b/NameCreater/customlogo.ui index 49eff19..1beb264 100644 --- a/NameCreater/customlogo.ui +++ b/NameCreater/customlogo.ui @@ -76,6 +76,42 @@ 雙面 + + + + 340 + 310 + 160 + 80 + + + + + + + 選色 + + + + + + + + 18 + 75 + true + + + + + + + 顏色 + + + + + diff --git a/NameCreater/customlogo2.cpp b/NameCreater/customlogo2.cpp index 2af63fc..e250a66 100644 --- a/NameCreater/customlogo2.cpp +++ b/NameCreater/customlogo2.cpp @@ -200,16 +200,13 @@ void customlogo2::gerneraImageFromList(const QList& nameList, Name_T textItem->setPos(20+(itemRect.width() - textItem->boundingRect().width())/2,42); - scene.addItem(textItem); - QString name_en = name_info.name_eng; QGraphicsTextItem* textItem_en = new QGraphicsTextItem(name_en, name_bgItem); textItem_en->setFont(enFont); textItem_en->setDefaultTextColor(fontColor); textItem_en->setPos(20+(itemRect.width() - textItem_en->boundingRect().width())/2,170); - scene.addItem(textItem_en); - + bool is_export_page = ((idx + 1) % BG_POS_COUNT == 0); if (is_export_page || n == nameList.count() - 1) { QString date_str = QDateTime::currentDateTime().toString("MMddhhmm");