#include "TowelCreater.h" #include #include #include #include #include static QString LABEL_BG_PATH[] = { ":/NameCreater/resource/girl_bg.jpg",":/NameCreater/resource/boy_bg.jpg" }; static qreal LABEL_POS_X[] = { 250,1645,3300 }; static qreal LABEL_POS_Y_START = 120; static qreal LABEL_POS_Y_DIFF = 315; static qreal NAME_OFFSET_X[] = { 128, 715 }; static qreal NAME_OFFSET_Y = 38; static qreal NAME_TWO_WORD_OFFSET = 25; static int MAX_LABEL_IN_PAPER = 15; static int LABEL_MAX_NUM_PER_COL = 7; static int FONT_PIXEL_SIZE = 240; static qreal LABEL_HIGHT_LIMIT = 350; static int TEXT_WIDTH = 800; TowelCreater::TowelCreater() { } TowelCreater::~TowelCreater() { } QList TowelCreater::getNameByFileContent(const QByteArray& conetent) { QList nameList; QTextCodec* tc = QTextCodec::codecForName("Big5"); QString codec = tc->toUnicode(conetent.data()); QTextStream stream(&codec); int row = 0; while (!stream.atEnd()) { QString line = stream.readLine(); QString name_tc = line; QStringList csvList = name_tc.split(','); QString name = csvList.at(0); //QString::fromLocal8Bit(csvList.at(0)); QString bg_type = csvList.at(1);//QString::fromLocal8Bit(csvList.at(1)); int num = csvList.last().toInt();//QString::fromLocal8Bit(csvList.last()); qDebug() << "row :" << row << " " << name << ", bg_type: " << bg_type << "Count: " < nameList = getNameByFileContent(filecontent); if (nameList.isEmpty()) { QMessageBox msgBox; msgBox.setText(QString("Name is empty ! ").append(filename)); msgBox.exec(); } QGraphicsScene scene; scene.setBackgroundBrush(QBrush(QColor(255, 255, 255))); QGraphicsView view(&scene); for (int idx = 0; idx < nameList.length(); idx++) { NameInfo_t name = nameList.at(idx); 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); } int col_idx = (idx % MAX_LABEL_IN_PAPER) / LABEL_MAX_NUM_PER_COL; int col_num = (idx % MAX_LABEL_IN_PAPER) % LABEL_MAX_NUM_PER_COL; QString label_rel_path = LABEL_BG_PATH[name.bg_type]; if (col_idx < 2) { QGraphicsPixmapItem* label_item = new QGraphicsPixmapItem(QPixmap(label_rel_path)); label_item->setPos(LABEL_POS_X[col_idx], LABEL_POS_Y_START + LABEL_POS_Y_DIFF * col_num); label_item->setOpacity(1); scene.addItem(label_item); for (int i = 0; i < 2; ++i) { qreal offset_x = name.name1.count() == 2 ? NAME_TWO_WORD_OFFSET : 0; QGraphicsTextItem* name_item = new QGraphicsTextItem(name.name1); name_item->setTextWidth(TEXT_WIDTH); name_item->setFont(font); name_item->setDefaultTextColor(font_color); name_item->setPos(label_item->x() + NAME_OFFSET_X[i] + offset_x, label_item->y() + NAME_OFFSET_Y); scene.addItem(name_item); } } else { QGraphicsPixmapItem* label_item = new QGraphicsPixmapItem(QPixmap(label_rel_path)); label_item->setRotation(90); label_item->setPos(LABEL_POS_X[col_idx], LABEL_POS_Y_START + LABEL_POS_Y_DIFF * col_num); label_item->setOpacity(1); scene.addItem(label_item); for (int i = 0; i < 2; ++i) { qreal offset_x = name.name1.count() == 2 ? NAME_TWO_WORD_OFFSET : 0; QGraphicsTextItem* name_item = new QGraphicsTextItem(name.name1); name_item->setTextWidth(TEXT_WIDTH); name_item->setFont(font); name_item->setDefaultTextColor(font_color); name_item->setRotation(90); name_item->setPos(label_item->x() - NAME_OFFSET_Y, label_item->y() + NAME_OFFSET_X[i] + offset_x); scene.addItem(name_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("Towel_%2_%1.jpg").arg(QString::number(export_times + 1), date_str); saveToImage(file_name, &scene); export_times++; scene.clear(); } } }