From 9901037a688801db57f9fb57c3cf0478f62de107 Mon Sep 17 00:00:00 2001 From: shouchih_chen Date: Fri, 11 Feb 2022 06:42:33 +0800 Subject: [PATCH] finish layout design. --- NameCreater/main.cpp | 83 ++++++++++++++++++++++++++++++++++++-------- 1 file changed, 69 insertions(+), 14 deletions(-) diff --git a/NameCreater/main.cpp b/NameCreater/main.cpp index a2f1d7e..9230ee1 100644 --- a/NameCreater/main.cpp +++ b/NameCreater/main.cpp @@ -6,37 +6,92 @@ #include "QGraphicsPixmapItem" #include "QGraphicsTextItem" +#define BG_PATH ":/NameCreater/resource/background.jpg" +#define FONT_NAME QStringLiteral("華康圓體 Std W8") +#define FONT_SIZE 76 + +static QPointF BOY_POS[] = { + QPointF(235, 400), QPointF(366, 1420), + QPointF(555, 400), QPointF(692, 1420), + QPointF(878, 400), QPointF(1014, 1420), + QPointF(1200, 400), QPointF(1337, 1420), + QPointF(1527, 400), QPointF(1663, 1420), +}; + +static int BOY_POS_COUNT = sizeof(BOY_POS) / sizeof(BOY_POS[0]); + + +static QPointF GIRL_POS[] = { + QPointF(1854, 400), QPointF(1987, 1420), + QPointF(2176, 400), QPointF(2314, 1420), + QPointF(2498, 400), QPointF(2635, 1420), + QPointF(2821, 400), QPointF(2958, 1420), + QPointF(3147, 400), QPointF(3285, 1420), +}; + +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); + + + QPainter painter(&image); + scene->render(&painter); + image.save(filename); + +} + int main(int argc, char *argv[]) { + QApplication::setAttribute(Qt::AA_EnableHighDpiScaling); QApplication a(argc, argv); - NameCreater w; - w.show(); + QFont font(FONT_NAME, FONT_SIZE); + QColor font_color(0, 0, 0); QGraphicsScene scene; - scene.addText("Hello, world!"); - QGraphicsView view(&scene); - QImage image(":/NameCreater/resource/background_sample.jpg"); + QImage image(BG_PATH); QGraphicsPixmapItem* bgItem = new QGraphicsPixmapItem(QPixmap::fromImage(image)); scene.addItem(bgItem); - QGraphicsTextItem* textItem = new QGraphicsTextItem(QStringLiteral("蘇\n湧\n閎")); - textItem->setFont(QFont(QStringLiteral("華康圓體 Std W8"),76)); - textItem->setDefaultTextColor(QColor(255,0,0)); - textItem->setPos(235, 400); - scene.addItem(textItem); + for (int i = 0; i < BOY_POS_COUNT; i++) { + QGraphicsTextItem* textItem = new QGraphicsTextItem(QStringLiteral("蘇\n湧\n閎")); + textItem->setFont(font); + textItem->setDefaultTextColor(font_color); + textItem->setPos(BOY_POS[i]); + int xscale, yscale; + xscale = yscale = (i % 2 == 1) ? -1 : 1; + textItem->setTransform(QTransform::fromScale(xscale, yscale)); + scene.addItem(textItem); + } - QGraphicsTextItem* textItem1 = new QGraphicsTextItem(QStringLiteral("陳\n守\n志")); - textItem1->setFont(QFont(QStringLiteral("華康圓體 Std W8"))); - textItem1->setTransform(QTransform::fromScale(1, -1)); - scene.addItem(textItem1); + for (int i = 0; i < GIRL_POS_COUNT; i++) { + QGraphicsTextItem* textItem = new QGraphicsTextItem(QStringLiteral("蘇\n于\n恩")); + textItem->setFont(font); + textItem->setDefaultTextColor(font_color); + textItem->setPos(GIRL_POS[i]); + int xscale, yscale; + xscale = yscale = (i % 2 == 1) ? -1 : 1; + textItem->setTransform(QTransform::fromScale(xscale, yscale)); + scene.addItem(textItem); + } + view.show(); + saveToImage("test.jpg",&scene); return a.exec(); }