You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

588 lines
16 KiB
C++

#include "DieUI.h"
DieUI::DieUI(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
//connect(ui.pushButton_autoId, SIGNAL(clicked()), this, SLOT(slot_autoId()));
//connect(ui.pushButton_addText, SIGNAL(clicked()), this, SLOT(slot_addText()));
//connect(ui.pushButton_deleteChar, SIGNAL(clicked()), this, SLOT(slot_deleteText()));
connect(ui.pushButton_addAllChar, SIGNAL(clicked()), this, SLOT(slot_addAllChar()));
connect(ui.pushButton_modifyText, SIGNAL(clicked()), this, SLOT(slot_modifyText()));
connect(ui.pushButton_cancelAllSelectChar, SIGNAL(clicked()), this, SLOT(slot_cancelAllSelectChar()));
connect(ui.pushButton_topAdjustPos, SIGNAL(clicked()), this, SLOT(slot_topAdjustPos()));
connect(ui.pushButton_downAdjustPos, SIGNAL(clicked()), this, SLOT(slot_downAdjustPos()));
connect(ui.pushButton_leftAdjustPos, SIGNAL(clicked()), this, SLOT(slot_leftAdjustPos()));
connect(ui.pushButton_rightAdjustPos, SIGNAL(clicked()), this, SLOT(slot_rightAdjustPos()));
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֺ<EFBFBD>С<EFBFBD><D0A1><EFBFBD>㣬<EFBFBD><E3A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD>㿪ͷ
QRegExp regExp("[0-9]*\\.?[0-9]+");
QValidator *validator = new QRegExpValidator(regExp, this);
ui.lineEdit_charWidth->setValidator(validator);
ui.lineEdit_charHeight->setValidator(validator);
ui.lineEdit_charX->setValidator(validator);
ui.lineEdit_charY->setValidator(validator);
QRegExp regExp3("[a-zA-Z0-9_]{1}"); //ֻ<><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ַ<EFBFBD>
/*ui.lineEdit_charContent->setValidator(new QRegExpValidator(regExp2, ui.lineEdit_charContent));
QValidator *validator = new QRegExpValidator(regExp3, this);*/
QValidator *validator2 = new QRegExpValidator(regExp3, this);
ui.lineEdit_charContent->setValidator(validator2);
m_pen.setColor(RECT_COLOR);
m_pen.setWidth(4);
ui.comboBox_2->clear();
QStringList resList;
resList << "0.001" << "0.005" << "0.010" << "0.020";
ui.comboBox_2->addItems(resList);
ui.comboBox_2->setCurrentIndex(2);
}
DieUI::~DieUI()
{
}
void DieUI::slot_dealMouseEvent(QPointF p1, QPointF p2)
{
if (m_drawType == LINE)
{
//AddLine(p1.x(), p1.y(), p2.x(), p2.y());
}
else if (m_drawType == RECT)
{
AddRect(p1.x(), p1.y(), p2.x(), p2.y());
}
else if (m_drawType == CIRCLE)
{
//AddCircle(p1.x(), p1.y(), p2.x(), p2.y());
}
else if (m_drawType == TEXT)
{
//AddText(p1.x(), p1.y());
}
}
void DieUI::slot_dealSelect(int id)
{
m_curSelectId = id;
for (auto& iter : m_textItemVec)
{
if (iter->m_id == id)
{
ui.lineEdit_uniqueId->setText(QString::number(iter->m_id));
//<2F><><EFBFBD>½<EFBFBD><C2BD><EFBFBD><EFBFBD><EFBFBD>ʾ
ui.lineEdit_charContent->setText(iter->charContent);
ui.lineEdit_charX->setText(QString::number(iter->charPosX));
ui.lineEdit_charY->setText(QString::number(iter->charPosY));
ui.lineEdit_charWidth->setText(QString::number(iter->charWidth));
ui.lineEdit_charHeight->setText(QString::number(iter->charHeight));
}
}
}
void DieUI::AddLine(int id, double x1, double y1, double x2, double y2)
{
//std::shared_ptr<MyQGraphicsLineItem> lineObj = std::make_shared<MyQGraphicsLineItem>(x1 - x1, y1 - y1, x2 - x1, y2 - y1);
std::shared_ptr<MyQGraphicsLineItem> lineObj = std::make_shared<MyQGraphicsLineItem>();
connect(lineObj.get(), SIGNAL(signal_select(int)), this, SLOT(slot_dealSelect(int)));
lineObj->SetLineCoord(x1, y1, x2, y2, true);
lineObj->Id(id);
lineObj->setPen(m_pen);
m_lineItemVec.push_back(lineObj);
m_scene.addItem(lineObj.get());
}
void DieUI::AddRect(double x1, double y1, double x2, double y2)
{
if (x1 >= x2 || y1 >= y2)
{
return;
}
double width = abs(x2 - x1);
double height = abs(y2 - y1);
std::shared_ptr<MyDrawRectItem> RectObj = std::make_shared<MyDrawRectItem>(0, 0, width, height);
connect(RectObj.get(), SIGNAL(signal_select(int)), this, SLOT(slot_dealSelect(int)));
RectObj->SetDrawRectAttr(x1, y1, width, height);
RectObj->setPen(m_pen);
m_rectItemVec.push_back(RectObj);
m_scene.addItem(RectObj.get());
}
void DieUI::AddCircle(int id, double x1, double y1, double diameter)
{
std::shared_ptr<MyQGraphicsEllipseItem> ciecleObj = std::make_shared<MyQGraphicsEllipseItem>(0, 0, diameter, diameter);
connect(ciecleObj.get(), SIGNAL(signal_select(int)), this, SLOT(slot_dealSelect(int)));
ciecleObj->SetCircleAttr(x1, y1, diameter, diameter);
ciecleObj->Id(id);
ciecleObj->setPen(m_pen);
m_circleItemVec.push_back(ciecleObj);
m_scene.addItem(ciecleObj.get());
}
void DieUI::AddText(double x1, double y1)
{
/*QString testA = "A";
std::shared_ptr<MyQGraphicsTextItem> textObj = std::make_shared<MyQGraphicsTextItem>(testA);
connect(textObj.get(), SIGNAL(signal_select(int)), this, SLOT(slot_dealSelect(int)));
textObj->SetTextAttr(x1, y1);
textObj->setDefaultTextColor(RECT_COLOR);
m_textItemVec.push_back(textObj);
m_scene.addItem(textObj.get());*/
}
void DieUI::commonAddText(int charId)
{
if (!JudgeIdIsNormal())
{
return;
}
/*if (!(ui.lineEdit_charWidth->text().toDouble() >= 0.08 && ui.lineEdit_charWidth->text().toDouble() <= m_dieWidth &&
ui.lineEdit_charHeight->text().toDouble() >= 0.12 && ui.lineEdit_charHeight->text().toDouble() <= m_dieHeight))
{
QMessageBox::StandardButton button = QMessageBox::information(
nullptr,
QString::fromLocal8Bit("<EFBFBD><EFBFBD>ʾ"),
QString::fromLocal8Bit("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָߡ<EFBFBD>0.12mm<EFBFBD><EFBFBD><EFBFBD>ֿ<EFBFBD><EFBFBD><EFBFBD>0.08mm<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҷ<EFBFBD>С<EFBFBD><EFBFBD>die<EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"),
QMessageBox::Yes,
QMessageBox::NoButton);
ui.lineEdit_charWidth->clear();
ui.lineEdit_charHeight->clear();
return;
}*/
/*if (!(ui.lineEdit_charX->text().toDouble() >= ZERO && ui.lineEdit_charX->text().toDouble() <= m_dieWidth &&
ui.lineEdit_charY->text().toDouble() >= 0.12 && ui.lineEdit_charY->text().toDouble() <= m_dieHeight))
{
QMessageBox::StandardButton button = QMessageBox::information(
nullptr,
QString::fromLocal8Bit("<EFBFBD><EFBFBD>ʾ"),
QString::fromLocal8Bit("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD>׼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD>die<EFBFBD>Ŀ<EFBFBD><EFBFBD><EFBFBD>"),
QMessageBox::Yes,
QMessageBox::NoButton);
ui.lineEdit_charX->clear();
ui.lineEdit_charY->clear();
return;
}*/
QString testA = ui.lineEdit_charContent->text();
std::shared_ptr<MyQGraphicsTextItem> textObj = std::make_shared<MyQGraphicsTextItem>(testA);
connect(textObj.get(), SIGNAL(signal_select(int)), this, SLOT(slot_dealSelect(int)));
textObj->SetTextAttr(ui.lineEdit_charX->text().toDouble() * DIE_SCALE, ui.lineEdit_charY->text().toDouble() * DIE_SCALE);
textObj->setDefaultTextColor(RECT_COLOR);
textObj->m_id = charId;
textObj->charPosX = ui.lineEdit_charX->text().toDouble();
textObj->charPosY = ui.lineEdit_charY->text().toDouble()/* * (-1.0)*/;
textObj->charWidth = ui.lineEdit_charWidth->text().toDouble();
textObj->charHeight = ui.lineEdit_charHeight->text().toDouble();
textObj->charContent = testA;
//200<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD><C5B5><EFBFBD>400<30><30><EFBFBD><EFBFBD>
QFont font("Arial", ui.lineEdit_charHeight->text().toDouble() * DIE_SCALE / 2, QFont::Bold); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>ϸ
textObj->setFont(font);
m_textItemVec.push_back(textObj);
m_scene.addItem(textObj.get());
}
bool DieUI::JudgeIdIsNormal()
{
bool flag = true;
int id = ui.lineEdit_uniqueId->text().toInt();
if (ui.lineEdit_uniqueId->text().size() <= 0)
{
flag = false;
}
for (auto& iter : m_lineItemVec)
{
if (iter->Id() == id)
{
flag = false;
}
}
for (auto& iter : m_rectItemVec)
{
if (iter->Id() == id)
{
flag = false;
}
}
for (auto& iter : m_circleItemVec)
{
if (iter->Id() == id)
{
flag = false;
}
}
for (auto& iter : m_textItemVec)
{
if (iter->Id() == id)
{
flag = false;
}
}
if (!flag)
{
QMessageBox::StandardButton button = QMessageBox::information(
nullptr,
QString::fromLocal8Bit("<EFBFBD><EFBFBD>ʾ"),
QString::fromLocal8Bit("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID"),
QMessageBox::Yes,
QMessageBox::NoButton);
return false;
}
return true;
}
void DieUI::CommonAdjustCharPos(int flag, double dis)
{
for (auto& iter : m_textItemVec)
{
if (iter->m_textItemIsSelect)
{
if (flag == 0)
{
iter->charPosY -= dis;
}
if (flag == 1)
{
iter->charPosY += dis;
}
if (flag == 2)
{
iter->charPosX -= dis;
}
if (flag == 3)
{
iter->charPosX += dis;
}
iter->SetTextAttr(iter->charPosX * DIE_SCALE, iter->charPosY * DIE_SCALE);
m_scene.update();
}
}
}
void DieUI::slot_addText()
{
commonAddText(ui.lineEdit_uniqueId->text().toInt());
}
void DieUI::slot_deleteText()
{
for (auto& iter = m_textItemVec.begin(); iter != m_textItemVec.end(); iter++)
{
if ((*iter)->m_id == m_curSelectId)
{
m_scene.removeItem((*iter).get());
m_textItemVec.erase(iter);
break;
}
}
}
void DieUI::slot_modifyText()
{
if (ui.lineEdit_uniqueId->text().size() < 1)
{
return;
}
int id = ui.lineEdit_uniqueId->text().toInt();
for (auto& iter = m_textItemVec.begin(); iter != m_textItemVec.end(); iter++)
{
if ((*iter)->m_id == id)
{
(*iter)->charPosX = ui.lineEdit_charX->text().toDouble();
(*iter)->charPosY = ui.lineEdit_charY->text().toDouble();
(*iter)->charWidth = ui.lineEdit_charWidth->text().toDouble();
(*iter)->charHeight = ui.lineEdit_charHeight->text().toDouble();
(*iter)->SetTextAttr((*iter)->charPosX * DIE_SCALE, (*iter)->charPosY * DIE_SCALE);
m_scene.update();
}
}
}
void DieUI::slot_addAllChar()
{
for (auto& iter = m_textItemVec.begin(); iter != m_textItemVec.end(); iter++)
{
m_scene.removeItem((*iter).get());
}
m_textItemVec.clear();
int normalReplaceStrNum = ui.lineEdit_normalReplaceStr->text().toInt();
int serialNumSize = ui.lineEdit_serialReplaceStr->text().toInt();
int startIndex = 0;
for (char c = 'A'; c <= 'Z'; ++c) {
if (startIndex >= normalReplaceStrNum)
{
break;
}
QString testA = QString(QChar(c));
std::shared_ptr<MyQGraphicsTextItem> textObj = std::make_shared<MyQGraphicsTextItem>(testA);
textObj->m_id = startIndex;
textObj->charPosX = 0.5 + startIndex * 0.2;
textObj->charPosY = 0.5;
textObj->charWidth = 0.09;
textObj->charHeight = 0.12;
textObj->charContent = testA;
connect(textObj.get(), SIGNAL(signal_select(int)), this, SLOT(slot_dealSelect(int)));
textObj->SetTextAttr(textObj->charPosX * DIE_SCALE, textObj->charPosY * DIE_SCALE);
textObj->setDefaultTextColor(RECT_COLOR);
//200<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD><C5B5><EFBFBD>400<30><30><EFBFBD><EFBFBD>
QFont font("Arial", textObj->charHeight * DIE_SCALE, QFont::Bold); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>ϸ
textObj->setFont(font);
m_textItemVec.push_back(textObj);
m_scene.addItem(textObj.get());
startIndex++;
}
for (int i = 0; i < serialNumSize; i++)
{
QString testA = QString::number(i);
std::shared_ptr<MyQGraphicsTextItem> textObj = std::make_shared<MyQGraphicsTextItem>(testA);
textObj->m_id = startIndex;
textObj->charPosX = 0.5 + i * 0.2;
textObj->charPosY = 1;
textObj->charWidth = 0.09;
textObj->charHeight = 0.12;
textObj->charContent = testA;
connect(textObj.get(), SIGNAL(signal_select(int)), this, SLOT(slot_dealSelect(int)));
textObj->SetTextAttr(textObj->charPosX * DIE_SCALE, textObj->charPosY * DIE_SCALE);
textObj->setDefaultTextColor(RECT_COLOR);
//200<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD><C5B5><EFBFBD>400<30><30><EFBFBD><EFBFBD>
QFont font("Arial", textObj->charHeight * DIE_SCALE, QFont::Bold); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>ϸ
textObj->setFont(font);
m_textItemVec.push_back(textObj);
m_scene.addItem(textObj.get());
startIndex++;
}
}
void DieUI::slot_cancelAllSelectChar()
{
for (auto& iter : m_textItemVec)
{
iter->m_textItemIsSelect = false;
iter->setDefaultTextColor(RECT_COLOR);
}
}
void DieUI::slot_topAdjustPos()
{
CommonAdjustCharPos(0, ui.comboBox_2->currentText().toDouble());
}
void DieUI::slot_downAdjustPos()
{
CommonAdjustCharPos(1, ui.comboBox_2->currentText().toDouble());
}
void DieUI::slot_leftAdjustPos()
{
CommonAdjustCharPos(2, ui.comboBox_2->currentText().toDouble());
}
void DieUI::slot_rightAdjustPos()
{
CommonAdjustCharPos(3, ui.comboBox_2->currentText().toDouble());
}
void DieUI::slot_autoId()
{
int uniqueId = -1;
for (int id = 0; id < 1000; id++)
{
bool idIsUse = false;
for (auto& iter : m_lineItemVec)
{
if (iter->Id() == id)
{
idIsUse = true;
}
}
for (auto& iter : m_rectItemVec)
{
if (iter->Id() == id)
{
idIsUse = true;
}
}
for (auto& iter : m_circleItemVec)
{
if (iter->Id() == id)
{
idIsUse = true;
}
}
for (auto& iter : m_textItemVec)
{
if (iter->Id() == id)
{
idIsUse = true;
}
}
if (!idIsUse)
{
uniqueId = id;
break;
}
}
ui.lineEdit_uniqueId->setText(QString::number(uniqueId));
}
void DieUI::ShowDieCoordLayout(double dieWidth, double dieHeight, QStringList& allFontList, QString recipeFileCurFont)
{
m_dieWidth = dieWidth;
m_dieHeight = dieHeight;
m_allFontList = allFontList;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ
m_XCoordAxis = std::make_shared<MyQGraphicsLineItem>(-m_dieWidth * DIE_SCALE - 100, 0, m_dieWidth * DIE_SCALE + 100, 0);
m_XCoordAxis->setPen(m_pen);
m_XCoordAxis->CoordAxis(true);
m_YCoordAxis = std::make_shared<MyQGraphicsLineItem>(0, -m_dieHeight * DIE_SCALE - 100, 0, m_dieHeight * DIE_SCALE + 100);
m_YCoordAxis->setPen(m_pen);
m_YCoordAxis->CoordAxis(true);
//<2F><><EFBFBD><EFBFBD>die
m_dieObj = std::make_shared<MyDieRectItem>(0, 0, m_dieWidth * DIE_SCALE, m_dieHeight * DIE_SCALE);
m_dieObj->setPen(m_pen);
connect(m_dieObj.get(), SIGNAL(signal_mouse(QPointF, QPointF)), this, SLOT(slot_dealMouseEvent(QPointF, QPointF)));
m_scene.addItem(m_XCoordAxis.get());
m_scene.addItem(m_YCoordAxis.get());
m_scene.addItem(m_dieObj.get());
ui.graphicsView->setScene(&m_scene);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
QStringListModel *model = new QStringListModel();
model->setStringList(m_allFontList);
ui.comboBox->setModel(model);
ui.comboBox->setCurrentIndex(0);
for (auto& iter : m_allFontList)
{
if (iter == recipeFileCurFont)
{
ui.comboBox->setCurrentText(recipeFileCurFont);
}
}
}
bool DieUI::SetRecipeDie(RecipeAttrObj& obj)
{
if (m_textItemVec.size() <= 0)
{
return false;
}
obj.m_fontType = ui.comboBox->currentText();
obj.m_markCharVec.clear();
obj.m_markGraphicsVec.clear();
for (auto& iter : m_textItemVec)
{
MarkChar resMarkChar;
resMarkChar.charId = iter->m_id;
resMarkChar.charData = iter->charContent.toStdString();
resMarkChar.x = iter->charPosX;
resMarkChar.y = iter->charPosY;
resMarkChar.charWidth = iter->charWidth;
resMarkChar.charHeight = iter->charHeight;
obj.m_markCharVec.push_back(resMarkChar);
}
//<2F><>ֵ
obj.m_serialStartStr.clear();
for (int i = 0; i < ui.lineEdit_serialReplaceStr->text().toInt(); i++)
{
obj.m_serialStartStr.append(QString::number(0));
}
return true;
}
void DieUI::ShowRecipeAllCharOnDie(RecipeAttrObj& obj, QStringList allFontType)
{
ShowDieCoordLayout(obj.m_dieWidth, obj.m_dieHeight, allFontType, obj.m_fontType);
for (auto& iter : m_textItemVec)
{
m_scene.removeItem(iter.get());
}
m_textItemVec.clear();
for (auto& iter : obj.m_markCharVec)
{
QString testA = QString::fromStdString(iter.charData);
std::shared_ptr<MyQGraphicsTextItem> textObj = std::make_shared<MyQGraphicsTextItem>(testA);
connect(textObj.get(), SIGNAL(signal_select(int)), this, SLOT(slot_dealSelect(int)));
textObj->SetTextAttr(iter.x * DIE_SCALE, iter.y * DIE_SCALE/* * (-1)*/);
textObj->setDefaultTextColor(RECT_COLOR);
textObj->m_id = iter.charId;
textObj->charPosX = iter.x;
textObj->charPosY = iter.y;
textObj->charWidth = iter.charWidth;
textObj->charHeight = iter.charHeight;
textObj->charContent = testA;
//200<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD><C5B5><EFBFBD>400<30><30><EFBFBD><EFBFBD>
QFont font("Arial", textObj->charHeight * DIE_SCALE/* / 2*/, QFont::Bold); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>ϸ
textObj->setFont(font);
m_textItemVec.push_back(textObj);
m_scene.addItem(textObj.get());
}
ui.lineEdit_normalReplaceStr->setText(QString::number(obj.m_markCharVec.size() - obj.m_serialStartStr.size()));
ui.lineEdit_serialReplaceStr->setText(QString::number(obj.m_serialStartStr.size()));
ui.graphicsView->update();
}
void DieUI::ClearUIDie()
{
for (auto& iter : m_textItemVec)
{
m_scene.removeItem(iter.get());
}
m_textItemVec.clear();
ui.lineEdit_uniqueId->clear();
ui.lineEdit_charContent->clear();
ui.lineEdit_charX->clear();
ui.lineEdit_charY->clear();
ui.lineEdit_charWidth->clear();
ui.lineEdit_charHeight->clear();
}