Selaa lähdekoodia

提交标尺,数据库,十字线的代码,以及多语种翻译

yun 1 päivä sitten
vanhempi
sitoutus
185afbf53f

+ 1 - 0
Output/inc/Module/CConfigBase.h

@@ -33,6 +33,7 @@ namespace ns_db
 		INT iGroupId = 1;
 		string strName = "";
 		string strDescribe = "";
+		string strDescribe_Eng = "";
 		INT iUserGrade = 1;
 		INT iChangeFlag = 1;
 		string strValue = "";

+ 50 - 59
View/die-bonder-ui/CameraMaterialGroupWnd/MaterialWindow/DraggableLine.cpp

@@ -4,75 +4,66 @@
 #include <QDebug>
 #include <QGraphicsScene>
 
-void DraggableLine::mousePressEvent(QGraphicsSceneMouseEvent* event) {
-    QPointF pos = event->pos(); // 获取相对于项的坐标
-    QLineF currentLine = line();
-
-    if (isNearPoint(pos, currentLine.p1())) {
-        draggingStart = true;
-        offset = currentLine.p1() - pos;
-    }
-    else if (isNearPoint(pos, currentLine.p2())) {
-        draggingEnd = true;
-        offset = currentLine.p2() - pos;
-    }
-    else {
-        // 如果没有点击控制点,可以处理其他逻辑或忽略
-        QGraphicsLineItem::mousePressEvent(event);
-        return;
-    }
-    event->accept(); // 标记事件已处理
+RulerLineItem::RulerLineItem(const QLineF& line, QGraphicsItem* parent)
+    : QGraphicsLineItem(line, parent) {
+    initRuler();
+    createHandles();
 }
 
-
-void DraggableLine::mouseMoveEvent(QGraphicsSceneMouseEvent* event) {
-    if (draggingStart || draggingEnd) {
-        QLineF currentLine = line();
-        QPointF newPos = event->pos() + offset; // 计算新的端点位置
-
-        if (draggingStart) {
-            currentLine.setP1(newPos);
-        }
-        else {
-            currentLine.setP2(newPos);
-        }
-
-        setLine(currentLine); // 更新线段
-        scene()->update(); // 请求重绘
-        event->accept();
-    }
-    else {
-        QGraphicsLineItem::mouseMoveEvent(event);
-    }
+int RulerLineItem::type() const
+{
+    return Type;
 }
 
-
-void DraggableLine::mouseReleaseEvent(QGraphicsSceneMouseEvent* event) {
-    draggingStart = false;
-    draggingEnd = false;
-
-    QLineF currentLine = line();
-    qDebug() << "线段长度:" << currentLine.length();
-
-    QGraphicsLineItem::mouseReleaseEvent(event);
+void RulerLineItem::initRuler() {
+    // 初始化标尺样式
+    setPen(QPen(Qt::red, 2));
+    createTextItem();
+    setFlags(QGraphicsItem::ItemIsSelectable |
+        QGraphicsItem::ItemSendsGeometryChanges);
 }
 
+void RulerLineItem::createTextItem() {
+    m_textItem = new QGraphicsTextItem(this);
+    m_textItem->setDefaultTextColor(Qt::black);
+    m_textItem->setFont(QFont("Arial", 8));
+    updateTextPosition();
+}
 
-void DraggableLine::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) {
-    // 先调用基类方法绘制线段
-    QGraphicsLineItem::paint(painter, option, widget);
+void RulerLineItem::createHandles() {
+    // 创建可拖动端点
+    m_startHandle = new HandleItem(this);
+    m_endHandle = new HandleItem(this);
+    m_startHandle->setPos(line().p1());
+    m_endHandle->setPos(line().p2());
+    connect(m_startHandle, &HandleItem::positionChanged, this, &RulerLineItem::updateLineFromHandles);
+    connect(m_endHandle, &HandleItem::positionChanged, this, &RulerLineItem::updateLineFromHandles);
+}
 
-    // 绘制起点和终点的控制点
-    painter->setBrush(Qt::red);
-    painter->drawEllipse(line().p1(), 5, 5);
+void RulerLineItem::updateHandlePositions() {
+    QLineF l = line();
+    m_startHandle->setPos(l.p1());
+    m_endHandle->setPos(l.p2());
+    updateHandlesSignal(l.p1(), l.p2());
+}
 
-    painter->setBrush(Qt::blue);
-    painter->drawEllipse(line().p2(), 5, 5);
+void RulerLineItem::updateTextPosition()
+{
+    m_textItem->setPos(line().center());
 }
 
+void RulerLineItem::setRulerText(const QString& strText)
+{
+    m_strRulerText = strText;
+    m_textItem->setPlainText(strText);
+}
 
-bool DraggableLine::isNearPoint(const QPointF& pos, const QPointF& point) const
+void RulerLineItem::updateLineFromHandles()
 {
-    QLineF line(pos, point);
-    return (line.length() < 20); // 10像素范围内判定为点击控制点
-}
+    QLineF newLine(m_startHandle->pos(), m_endHandle->pos());
+    setLine(newLine);
+    updateTextPosition();
+    //       qreal length = line().length();
+    //       QString strText = QString("%1 px").arg(length, 0, 'f', 1);
+    //       setRulerText(strText);
+}

+ 65 - 17
View/die-bonder-ui/CameraMaterialGroupWnd/MaterialWindow/DraggableLine.h

@@ -1,30 +1,78 @@
-#ifndef DRAGGABLELINE_H
-#define DRAGGABLELINE_H
+#ifndef RULERLINEITEM_H
+#define RULERLINEITEM_H
 
 #include <QGraphicsLineItem >
 #include <QObject>
+#include <QPainter>
 
-class DraggableLine : public QGraphicsLineItem {
+class HandleItem : public QObject, public QGraphicsEllipseItem
+{
+    Q_OBJECT
 public:
-    DraggableLine(const QLineF& line, QGraphicsItem* parent = nullptr)
-        : QGraphicsLineItem(line, parent), draggingStart(false), draggingEnd(false) {
-        setAcceptHoverEvents(true);
-        setFlag(QGraphicsItem::ItemIsSelectable, true);
-        setFlag(QGraphicsItem::ItemIsMovable, false); // 禁用整体移动,只允许拖动端点
+    enum { Type = UserType + 2 };
+
+    HandleItem(QGraphicsItem* parent = nullptr)
+        : QGraphicsEllipseItem(-6, -6, 12, 12, parent) {
+        setFlag(QGraphicsItem::ItemIsSelectable);
+        setFlag(QGraphicsItem::ItemIsMovable);
+        setFlag(QGraphicsItem::ItemSendsGeometryChanges);
+        setBrush(Qt::cyan);
+        setPen(Qt::NoPen);
     }
 
+    int type() const override { return Type; }
+
 protected:
-    void mousePressEvent(QGraphicsSceneMouseEvent* event) override;
-    void mouseMoveEvent(QGraphicsSceneMouseEvent* event) override;
-    void mouseReleaseEvent(QGraphicsSceneMouseEvent* event) override;
-    void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) override;
+    QVariant itemChange(GraphicsItemChange change, const QVariant& value) override {
+        if (change == ItemPositionHasChanged) {
+            emit positionChanged();
+        }
+        return QGraphicsEllipseItem::itemChange(change, value);
+    }
+
+signals:
+    void positionChanged();
+};
+
+
+class RulerLineItem : public QObject, public QGraphicsLineItem
+{
+    Q_OBJECT
+public:
+    enum HandleType
+    {
+        NoHandle,
+        StartHandle,
+        EndHandle
+    };
+
+    enum { Type = UserType + 1 };
+    explicit RulerLineItem(const QLineF& line, QGraphicsItem* parent = nullptr);
+    int type() const override;
+    void setRulerText(const QString& strText);
+
+signals:
+    //标尺端点更新,发送信号
+    void updateHandlesSignal(QPointF sPos, QPointF ePos);
+
+
+private slots:
+    void updateLineFromHandles();
 
 private:
-    bool draggingStart;
-    bool draggingEnd;
-    QPointF offset;
+    void initRuler();
+    void createTextItem();
+    void createHandles();
+    void updateHandlePositions();
+    void updateTextPosition();
 
-    bool isNearPoint(const QPointF& pos, const QPointF& point) const;
+    // 成员变量
+    HandleType m_draggingHandle = NoHandle;
+    QPointF m_dragOffset;
+    QGraphicsTextItem* m_textItem = nullptr;
+    HandleItem* m_startHandle = nullptr;
+    HandleItem* m_endHandle = nullptr;
+    QString m_strRulerText;
 };
 
-#endif // DRAGGABLELINE_H
+#endif // RULERLINEITEM_H

+ 138 - 38
View/die-bonder-ui/ImageView.cpp

@@ -7,6 +7,7 @@
 #include <QFileDialog>
 #include <QDateTime>
 #include <QMessageBox>
+#include <QApplication>
 
 #define VIEW_CENTER viewport()->rect().center()
 #define VIEW_WIDTH  viewport()->rect().width()
@@ -19,16 +20,22 @@ ImageView::ImageView(QWidget* parent) :
     m_bMouseTranslate(false),
     m_isDrawing(false),
     m_curDrawing(false),
+    m_isCreating(false),
     m_currentPathItem(nullptr)
+
 {
+    //    m_rubberBand = nullptr;
+    m_bRulerState = false;
     m_pRuleLine = nullptr;
     setScene(new QGraphicsScene(this));
-    setRenderHint(QPainter::SmoothPixmapTransform);
     setTransformationAnchor(QGraphicsView::AnchorUnderMouse);
     this->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
     this->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
-    this->resize(parent->size());
-
+    //设置视图属性
+    //setRenderHint(QPainter::SmoothPixmapTransform);
+    setRenderHint(QPainter::Antialiasing);
+    setMouseTracking(true);
+    setDragMode(RubberBandDrag);
 }
 
 ImageView::~ImageView()
@@ -73,42 +80,30 @@ void ImageView::setCurPixmap(const QPixmap& newPixmap) {
     }
 }
 
-void ImageView::startRuler()
+void ImageView::addRuler()
 {
-    if (nullptr == m_pRuleLine) {
-        m_pRuleLine = new DraggableLine(QLineF(0, 0, 50, 50));
-        m_pRuleLine->setPen(QPen(Qt::red, 2));
-        m_pRuleLine->setZValue(2);
-        scene()->addItem(m_pRuleLine);
-    }
+    m_bRulerState = true;
 }
 
-void ImageView::endRuler()
+void ImageView::cancelRuler()
 {
-    if (nullptr != m_pRuleLine) {
-        scene()->removeItem(m_pRuleLine);
-        delete m_pRuleLine;
-        m_pRuleLine = nullptr;
-    }
-}
-
-bool ImageView::rulerVisibale()
-{
-    if (nullptr == m_pRuleLine)
-        return false;
-    else
-        return true;
+    m_bRulerState = false;
 }
 
 void ImageView::paintEvent(QPaintEvent* event) {
+
     QGraphicsView::paintEvent(event);
+    QPainter painter(viewport());
+    painter.setRenderHint(QPainter::Antialiasing);
+    drawCrosshair(painter);
 }
 
 void ImageView::mousePressEvent(QMouseEvent* event) {
     if (event->button() == Qt::LeftButton) {
         // 当光标底下没有 item 时,才能移动
         QPointF point = mapToScene(event->pos());
-        if (scene()->itemAt(point, transform()) != m_pRuleLine) {
+        if (scene()->itemAt(point, transform()) != nullptr
+            && scene()->itemAt(point, transform())->type() == QGraphicsPixmapItem::Type) {
             setCursor(Qt::OpenHandCursor);
             m_bMouseTranslate = true;
             m_lastMousePos = event->pos();
@@ -117,11 +112,40 @@ void ImageView::mousePressEvent(QMouseEvent* event) {
     else if (event->button() == Qt::RightButton) {
         m_rightClickPressPos = event->pos();
         m_rightButtonPressed = true;
+
+        if (m_bRulerState) {
+            if (!m_isCreating) {
+                // 第一次点击:开始创建
+                m_isCreating = true;
+                m_startPos = mapToScene(event->pos());
+                m_pTempLine = scene()->addLine(QLineF(m_startPos, m_startPos),
+                    QPen(Qt::gray, 1, Qt::DashLine));
+                m_pTempLine->setZValue(2);
+            }
+            else {
+                // 第二次点击:完成创建
+                m_isCreating = false;
+                QPointF endPos = mapToScene(event->pos());
+                scene()->removeItem(m_pTempLine);
+                delete m_pTempLine;
+
+                RulerLineItem* ruler = new RulerLineItem(QLineF(m_startPos, endPos));
+                ruler->setRulerText(tr("test ruler"));
+                ruler->setZValue(2);
+                scene()->addItem(ruler);
+            }
+        }
+        event->accept();
     }
     QGraphicsView::mousePressEvent(event);
 }
 
 void ImageView::mouseMoveEvent(QMouseEvent* event) {
+    if (m_isCreating && m_pTempLine) {
+        QPointF currentPos = mapToScene(event->pos());
+        m_pTempLine->setLine(QLineF(m_startPos, currentPos));
+    }
+
     if (m_bMouseTranslate) {
         // 计算鼠标当前位置与上次位置的差值
         QPointF delta = event->pos() - m_lastMousePos;
@@ -162,18 +186,20 @@ void ImageView::mouseReleaseEvent(QMouseEvent* event) {
     }
     else if (event->button() == Qt::RightButton && m_rightButtonPressed) {
         if (!m_curDrawing) {
-            // 右键点击(无拖动),弹出菜单
-            QMenu menu(this);
-            QAction* act1 = menu.addAction(tr("保存当前窗口图片"));
-            QAction* act2 = menu.addAction(tr("清除"));
-
-            connect(act1, &QAction::triggered, this, [this]() {
-                saveImage();
-                });
-            connect(act2, &QAction::triggered, this, [this]() {
-                clearDrawnLines();
-                });
-            menu.exec(event->globalPos());
+            if (!m_bRulerState) {
+                // 右键点击(无拖动),弹出菜单
+                QMenu menu(this);
+                QAction* act1 = menu.addAction(tr("save picture"));
+                QAction* act2 = menu.addAction(tr("clear"));
+
+                connect(act1, &QAction::triggered, this, [this]() {
+                    saveImage();
+                    });
+                connect(act2, &QAction::triggered, this, [this]() {
+                    clearDrawnLines();
+                    });
+                menu.exec(event->globalPos());
+            }
         }
         else {
             // 绘制结束
@@ -197,6 +223,75 @@ void ImageView::wheelEvent(QWheelEvent* event)
     event->accept();
 }
 
+void ImageView::resizeEvent(QResizeEvent* event)
+{
+    QGraphicsView::resizeEvent(event);
+    viewport()->update();  // 窗口大小改变时重绘十字线
+}
+
+void ImageView::scrollContentsBy(int dx, int dy)
+{
+    QGraphicsView::scrollContentsBy(dx, dy);
+    viewport()->update();  // 滚动时更新十字线
+}
+
+void ImageView::drawCrosshair(QPainter& painter)
+{
+    const QRect viewRect = viewport()->rect();
+    int resolutionWidth = viewRect.width();
+    int resolutionHeight = viewRect.height();
+    painter.setPen(QPen(QColor(139, 105, 20, 255), 1));
+    // 绘制垂直线
+    painter.drawLine(resolutionWidth / 2, 0, resolutionWidth / 2, resolutionHeight);
+    // 绘制水平线
+    painter.drawLine(0, resolutionHeight / 2, resolutionWidth, resolutionHeight / 2);
+
+    int centerX = resolutionWidth / 2;
+    int centerY = resolutionHeight / 2;
+
+    int rulerLength = viewRect.width(); // 量尺长度
+    int tickSpacing = 5; // 刻度间距
+
+    // 绘制水平中心线上的量尺
+    int rulerStartXHorizontal = centerX;
+    int rulerStartYHorizontal = centerY;
+
+    for (int i = 0; i <= rulerLength / 2; i += tickSpacing) {
+        int tickHeight = 0;
+        if (i % (tickSpacing * 10) == 0) { // 长刻度
+            tickHeight = 15;
+        }
+        else if (i % (tickSpacing * 5) == 0) { // 中等刻度
+            tickHeight = 10;
+        }
+        else { // 短刻度
+            tickHeight = 5;
+        }
+
+        painter.drawLine(rulerStartXHorizontal + i, rulerStartYHorizontal, rulerStartXHorizontal + i, rulerStartYHorizontal - tickHeight); // 绘制刻度线
+        painter.drawLine(rulerStartXHorizontal - i, rulerStartYHorizontal, rulerStartXHorizontal - i, rulerStartYHorizontal - tickHeight); // 绘制刻度线
+    }
+
+    // 绘制垂直中心线上的量尺
+    int rulerStartXVertical = centerX; 
+    int rulerStartYVertical = centerY;
+
+    for (int i = 0; i <= rulerLength / 2; i += tickSpacing) {
+        int tickWidth = 0;
+        if (i % (tickSpacing * 10) == 0) { // 长刻度
+            tickWidth = 15;
+        }
+        else if (i % (tickSpacing * 5) == 0) { // 中等刻度
+            tickWidth = 10;
+        }
+        else { // 短刻度
+            tickWidth = 5;
+        }
+        painter.drawLine(rulerStartXVertical, rulerStartYVertical - i, rulerStartXVertical - tickWidth, rulerStartYVertical - i);
+        painter.drawLine(rulerStartXVertical, rulerStartYVertical + i, rulerStartXVertical - tickWidth, rulerStartYVertical + i); 
+    }
+}
+
 void ImageView::saveImage()
 {
     // 使用当前时间生成默认文件名
@@ -228,4 +323,9 @@ void ImageView::clearDrawnLines()
 {
     qDeleteAll(m_drawnPaths);
     m_drawnPaths.clear();
-}
+    foreach(QGraphicsItem * item, scene()->selectedItems()) {
+        if (nullptr == item)
+            continue;
+        scene()->removeItem(item);
+    }
+}

+ 14 - 5
View/die-bonder-ui/ImageView.h

@@ -6,6 +6,7 @@
 #include <QMouseEvent>
 #include <QGraphicsView>
 #include "CameraMaterialGroupWnd/MaterialWindow/DraggableLine.h"
+#include <QRubberBand>
 
 class ImageView : public QGraphicsView
 {
@@ -20,10 +21,8 @@ public:
     void setCurPixmap(const QPixmap& pixmap);
 
     //设置标尺
-    void startRuler();
-    void endRuler();
-    bool rulerVisibale();
-
+    void addRuler();
+    void cancelRuler();
     void setIsDrawing(bool drawing) { m_isDrawing = drawing; }
 
 protected:
@@ -32,13 +31,18 @@ protected:
     void mouseMoveEvent(QMouseEvent* event) override;
     void mouseReleaseEvent(QMouseEvent* event) override;
     void wheelEvent(QWheelEvent* event) override;
+    void resizeEvent(QResizeEvent* event) override;
+    void scrollContentsBy(int dx, int dy) override;
 
+private:
+    void drawCrosshair(QPainter& painter);
 private:
     QGraphicsPixmapItem* m_pixmapItem;
     QPixmap m_pixmap;
     QPoint m_lastMousePos;  // 上一次鼠标的位置
     QPointF m_imageOffset;  // 图片的偏移量
-    DraggableLine* m_pRuleLine;
+    RulerLineItem* m_pRuleLine;
+    QList<RulerLineItem*> m_pRuleLines;
     bool m_bMouseTranslate;
     qreal m_minScale;
 
@@ -49,6 +53,11 @@ private:
     QList<QGraphicsPathItem*> m_drawnPaths;
     QPoint m_rightClickPressPos;
     bool m_rightButtonPressed;
+    //标尺
+    bool m_isCreating;
+    QPointF m_startPos;
+    QGraphicsLineItem* m_pTempLine = nullptr;
+    bool m_bRulerState;
 
     void saveImage();
     void clearDrawnLines();

+ 1 - 16
View/die-bonder-ui/Login.cpp

@@ -14,11 +14,6 @@ Login::Login(QWidget *parent)
     ui->setupUi(this);
     initForm();
 
-    if(gen_if.getLanguageValue() == 0){
-
-    }else{
-        setChineseMode(this);
-    }
 }
 
 Login::~Login()
@@ -37,17 +32,7 @@ void Login::initForm()
 
     connect(ui->userNameLineEdit, &QLineEdit::textChanged, this, &Login::onUserNameChanged);
 }
-void Login::setChineseMode(QMainWindow *Login)
-{
-    Login->setWindowTitle(tr("Login", "主界面"));
-    ui->SinginButton->setText(tr("Login", "登录"));
-    ui->label_logo->setText(QString());
-    ui->label_pass->setText(QString());
-    ui->label_user->setText(QString());
-    ui->ExitButton->setText(tr("Login", "退出"));
-    ui->userNameLineEdit->setPlaceholderText(tr("请输入账号"));
-    ui->passLineEdit->setPlaceholderText(tr("请输入密码"));
-}
+
 
 void Login::onUserNameChanged(const QString &userName) 
 {

+ 2 - 2
View/die-bonder-ui/Login.h

@@ -18,7 +18,7 @@ public:
 
     void initForm();
 
-    void setChineseMode(QMainWindow *Login);
+    
 private slots:
     void on_SinginButton_clicked();
     void onUserNameChanged(const QString &userName);
@@ -26,7 +26,7 @@ private slots:
     void on_ExitButton_clicked();
 
 signals:
-    /**发送切换窗口信号
+    /**锟斤拷锟斤拷锟叫伙拷锟斤拷锟斤拷锟脚猴拷
      */
     void SendSwitchOriginalWndSignals();
 

+ 32 - 18
View/die-bonder-ui/MainWnd.cpp

@@ -62,10 +62,11 @@ void MainWnd::on_tabSystemBtn_clicked()
     QPointer<SystemInfoPage> sys = new SystemInfoPage;
     //connect(sys, &Login::SendSwitchOriginalWndSignals, this, &MainWnd::ShowOriginalWndSlots);
 
+    connect(sys, &SystemInfoPage::languageChanged, this, &MainWnd::switchLanguage);
+
     ui->stackedWidget_UI->addWidget(sys);
     ui->stackedWidget_UI->setCurrentIndex(ui->stackedWidget_UI->indexOf(sys));
 
-
     return;
 
     QDialog settingsDialog(this);
@@ -174,7 +175,7 @@ void MainWnd::on_tabSystemBtn_clicked()
                 setLanguageSignal(current_language_data);
             }
             else {
-                setChineseMode(this);
+                //setChineseMode(this);
                 setLanguageSignal(current_language_data);
             }
         }
@@ -232,6 +233,7 @@ void MainWnd::applyTheme(int themeValue)
     else {
         qssFileName = ":/dark.qss";
     }
+    qssFileName = ":/dark.qss";
     QFile qssFile(qssFileName);
     if (qssFile.open(QFile::ReadOnly)) {
         QString qssContent = qssFile.readAll();
@@ -842,11 +844,14 @@ void MainWnd::Init()
 
     if (gen_if.getLanguageValue() == 0)
     {
-
+        translator.load(":/SBT_en.qm");
+        qApp->installTranslator(&translator);
     }
     else
     {
-        setChineseMode(this);
+        //setChineseMode(this);
+        translator.load(":/SBT_zh_CN.qm");
+        qApp->installTranslator(&translator);
     }
 
 
@@ -877,20 +882,7 @@ void MainWnd::Init()
     JLogAllOutput::cmd_debug("OriginalWnd 已设置为 stackedWidget 的当前页面");
 }
 
-void MainWnd::setChineseMode(QMainWindow* MainWnd) {
-    MainWnd->setWindowTitle(tr("MainWnd", "主界面"));
-    ui->tabHomeBtn->setText(tr("Home", "首页"));
-    ui->label_logo_m->setText(QString());
-    ui->tabProductionBtn->setText(tr("ProductHelp", "产品助手"));
-    ui->tabProgramBtn->setText(tr("Progress", "进程"));
-    ui->tabMessageBtn->setText(tr("Info", "信息"));
-    ui->tabModuleBtn->setText(tr("Calibration", "校准"));
-    ui->tabDispositionBtn->setText(tr("Module", "模块配置"));
-    ui->tabDiagnosisBtn->setText(tr("Diagnosis", "诊断"));
-    ui->tabSystemBtn->setText(tr("SysInfo", "系统信息"));
-    ui->tabHelpBtn->setText(tr("Help", "帮助"));
-    ui->pushButton->setText(tr("Close", "关闭"));
-}
+
 
 void MainWnd::on_pushButton_clicked()
 {
@@ -927,6 +919,28 @@ void MainWnd::on_pushButton_clicked()
     }
 }
 
+void MainWnd::switchLanguage(const QString& languageCode)
+{
+    qApp->removeTranslator(&translator); // 先移除当前翻译器
+
+    if (languageCode == "en") {
+        translator.load(":/SBT_en.qm");
+        gen_if.setLanguageValue(0);
+    }
+    else if (languageCode == "zh_CN") {
+        translator.load(":/SBT_zh_CN.qm");
+        gen_if.setLanguageValue(1);
+    }
+
+    qApp->installTranslator(&translator);
+}
+
+void MainWnd::changeEvent(QEvent* event) {
+    if (event->type() == QEvent::LanguageChange) {
+        ui->retranslateUi(this);
+    }
+}
+
 // QJsonObject MainWnd::getInfofromDb(){
 //     QJsonObject data;
 //     QJsonArray fieldsArray;

+ 7 - 1
View/die-bonder-ui/MainWnd.h

@@ -13,6 +13,7 @@
 #include "gen_interface.h"
 #include "Src/Sql/SqlOperation.h"
 #include "Src/CameraBind.h"
+#include <QTranslator>
 
 //struct ST_RUN_MSG
 //{
@@ -43,12 +44,15 @@ public:
 private:
     void Init();
 
-    void setChineseMode(QMainWindow* MainWnd);
+    //void setChineseMode(QMainWindow* MainWnd);
     void InitForm();
 
     /**加载登录界面
      */
     void LoadLoginPage();
+
+    void switchLanguage(const QString& languageCode);
+
 protected:
     void applyTheme(int themeValue);
 
@@ -59,6 +63,7 @@ protected:
      */
     void SwitchToConfig(void (OriginalWnd::* switchMethod)());
 
+    void changeEvent(QEvent* event);
 signals:
     void setLanguageSignal(const int& data);
     void styleChanged();
@@ -110,5 +115,6 @@ private:
     /**所有sql 数据加载
      */
     SqlOperation* m_sqlOper;
+    QTranslator translator;
 };
 #endif // MAINWND_H

+ 29 - 1
View/die-bonder-ui/OriginalWnd/DbTreeViewManager.cpp

@@ -1941,6 +1941,18 @@ void DbTreeViewManager::displayThirdLevelFields(const QList<ST_TABLE_CONTROL_DAT
     m_thirdLevelFieldWnd = new QWidget(m_pOriginalWndMenuPage);
     m_thirdLevelFieldWnd->setWindowTitle(m_strShowName);
     m_thirdLevelFieldWnd->setStyleSheet("background-color: transparent;");
+
+    connect(m_thirdLevelFieldWnd, &QObject::destroyed, this, [=]()
+        {
+            if (!modifiedLabels.isEmpty())
+            {
+                if (JMessageTip::Message_question(tr("Modifications detected, do you want to save?", "检测到修改内容,是否保存?"), this) == QMessageBox::Yes)
+                {
+                    emit saveClicked();
+                }
+            }
+        });
+
     if (isHome)
     {
         // Home 界面,填满 widget2
@@ -1973,6 +1985,8 @@ void DbTreeViewManager::displayThirdLevelFields(const QList<ST_TABLE_CONTROL_DAT
     scrollLayout->addLayout(separatorLayout);
     separator->show();
 
+    languageValue = gen_if.getLanguageValue();
+
     //不同表格的全部插进来
     int previousGroupId = -1;
     QList<CONFIG_BASE_STRUCT> buttonControls;
@@ -1992,6 +2006,7 @@ void DbTreeViewManager::displayThirdLevelFields(const QList<ST_TABLE_CONTROL_DAT
                 //int fieldId = control.iId;
                 QString fieldName = QString::fromStdString(control.strName);
                 QString fieldDescribe = QString::fromStdString(control.strDescribe);
+                QString fieldDescribe_Eng = QString::fromStdString(control.strDescribe_Eng);
                 QString fieldType = QString::fromStdString(control.strType);
                 QString fieldValue = QString::fromStdString(control.strValue);
                 QString fieldDefult = QString::fromStdString(control.strDefult);
@@ -2020,7 +2035,20 @@ void DbTreeViewManager::displayThirdLevelFields(const QList<ST_TABLE_CONTROL_DAT
                 QHBoxLayout* fieldLayout = new QHBoxLayout;
                 fieldLayout->setSpacing(5);
 
-                QLabel* label = new QLabel(fieldDescribe);
+                QLabel* label = new QLabel();
+                if (languageValue == 0) {
+                    label->setText(fieldDescribe_Eng);
+                    if (fieldDescribe_Eng.isEmpty()) {
+                        label->setText(fieldDescribe);
+                    }
+                }
+                else {
+                    label->setText(fieldDescribe);
+                    if (fieldDescribe.isEmpty()) {
+                        label->setText(fieldDescribe_Eng);
+                    }
+                }
+
                 label->setAlignment(Qt::AlignVCenter | Qt::AlignLeft);
                 label->setFixedHeight(24);
                 label->setMinimumWidth(120);

+ 4 - 0
View/die-bonder-ui/OriginalWnd/DbTreeViewManager.h

@@ -43,6 +43,7 @@
 #include <array>
 #include "CViewInterface.h"
 #include "Src/Sql/SqlOperation.h"
+#include "gen_interface.h"
 
 // 组合控件
 struct ST_COMBINED_CONT
@@ -302,6 +303,9 @@ private:
 
     //字段展示 m_clear 替换
     const QString m_strShowName = "DisplayName";
+
+    Gen_Interface gen_if;
+    int languageValue;
 private:
 
     //  每次切换控制屏幕时,清空历史

+ 14 - 22
View/die-bonder-ui/OriginalWnd/OriginalWnd.cpp

@@ -34,7 +34,7 @@ OriginalWnd::OriginalWnd(QWidget* parent, CameraBind* pCameraBind)
     }
     else
     {
-        setChineseMode(this);
+       // setChineseMode(this);
     }
 
     InitForm();
@@ -106,26 +106,6 @@ void OriginalWnd::switchToProgramConfig()
     SwitchToConfig("Programme", 5, 1);
 }
 
-void OriginalWnd::setChineseMode(QMainWindow* OriginalWnd)
-{
-    OriginalWnd->setWindowTitle(QCoreApplication::translate("OriginalWnd", "主界面", nullptr));
-    ui->stopButton->setText(QCoreApplication::translate("OriginalWnd", "停止", nullptr));
-    ui->startButton->setText(QCoreApplication::translate("OriginalWnd", "启动", nullptr));
-    ui->ChartButton->setText(QString());
-    ui->DoubleImageButton->setText(QString());
-    ui->SingleImageButton->setText(QString());
-    // ui->pushButton_18->setText(QCoreApplication::translate("OriginalWnd", "PushButton", nullptr));
-    ui->label_name->setText(QCoreApplication::translate("OriginalWnd", "姓名001", nullptr));
-    ui->RegistrationNumber->setText(QCoreApplication::translate("OriginalWnd", "注册号码 001", nullptr));
-    ui->CalibrationButton->setText(QCoreApplication::translate("OriginalWnd", "校准", nullptr));
-    ui->ProductIotNumber->setText(QCoreApplication::translate("OriginalWnd", "xxx生产编号", nullptr));
-    ui->MachineLink->setText(QString());
-    ui->HostStatus->setText(QString());
-    ui->label_time->setText(QString());
-    ui->label_username->setText(QString());
-    ui->label_userlogo->setText(QString());
-}
-
 void OriginalWnd::switchToSystemConfig()
 {
     QString name = "SystemInfor";
@@ -360,7 +340,7 @@ void OriginalWnd::onHandleLanguageSignal(const int& data)
     }
     else
     {
-        setChineseMode(this);
+        //setChineseMode(this);
     }
 }
 
@@ -381,6 +361,11 @@ void OriginalWnd::StatusBar()
     updateHostStatusColor(currentStatus3);
 }
 
+void OriginalWnd::retranslateUi()
+{
+    ui->retranslateUi(this);
+}
+
 void OriginalWnd::updateCalibrationButtonColor(enum DEVICE_STATUS status)
 {
     QString styleSheet;
@@ -481,3 +466,10 @@ void OriginalWnd::updateHostStatusColor(enum HOST_STATUS status)
     // 设置按钮样式和文本
     ui->HostStatus->setStyleSheet(styleSheet);
 }
+
+void OriginalWnd::changeEvent(QEvent* event)
+{
+    if (event->type() == QEvent::LanguageChange) {
+        ui->retranslateUi(this);
+    }
+}

+ 6 - 1
View/die-bonder-ui/OriginalWnd/OriginalWnd.h

@@ -15,6 +15,7 @@
 #include "JOriginalMainWnd.h"
 #include "CameraDistribute.h"
 #include "Src/RewriteControl/Sidebar/LogStatePage.h"
+#include <QTranslator>
 //#include "CViewInterface.h"
 
 QT_BEGIN_NAMESPACE
@@ -64,7 +65,7 @@ public:
     void switchToModuleConfig();
     void switchToProgramConfig();
     void switchToSystemConfig();
-    void setChineseMode(QMainWindow* OriginalWnd);
+
 
 
     enum DEVICE_STATUS
@@ -100,6 +101,8 @@ public:
     void updateHostStatusColor(enum HOST_STATUS status);
     void StatusBar();
 
+    void retranslateUi();
+
 protected:
     bool eventFilter(QObject* obj, QEvent* event) override;
     void timerEvent(QTimerEvent* event) override;
@@ -122,6 +125,8 @@ protected:
      */
     void RunOrStopSwitch();
 
+    void changeEvent(QEvent* event);
+
 private slots:
     void on_ChartButton_clicked();
     void on_DoubleImageButton_clicked();

+ 1 - 1
View/die-bonder-ui/SBTdie-bonder-ui.vcxproj

@@ -261,7 +261,7 @@
     <ClInclude Include="CameraDistribute.h" />
     <QtMoc Include="CameraMaterialGroupWnd\MaterialWindow\BondGraphicsView.h" />
     <QtMoc Include="CameraMaterialGroupWnd\MaterialWindow\Bond.h" />
-    <ClInclude Include="CameraMaterialGroupWnd\MaterialWindow\DraggableLine.h" />
+    <QtMoc Include="CameraMaterialGroupWnd\MaterialWindow\DraggableLine.h" />
     <QtMoc Include="CameraMaterialGroupWnd\MaterialWindow\MaterialBoxGraphicsView.h" />
     <QtMoc Include="ImageView.h" />
     <ClInclude Include="JUserAccountsData.h" />

+ 3 - 3
View/die-bonder-ui/SBTdie-bonder-ui.vcxproj.filters

@@ -362,6 +362,9 @@
     <QtMoc Include="Src\CameraBind.h">
       <Filter>Header Files\Src</Filter>
     </QtMoc>
+    <QtMoc Include="CameraMaterialGroupWnd\MaterialWindow\DraggableLine.h">
+      <Filter>Header Files\CameraMaterialGroupWnd\MaterialWindow</Filter>
+    </QtMoc>
   </ItemGroup>
   <ItemGroup>
     <CustomBuild Include="debug\moc_predefs.h.cbt">
@@ -771,9 +774,6 @@
     <ClInclude Include="CameraMaterialGroupWnd\MaterialWindow\DieItem.h">
       <Filter>Header Files\CameraMaterialGroupWnd\MaterialWindow</Filter>
     </ClInclude>
-    <ClInclude Include="CameraMaterialGroupWnd\MaterialWindow\DraggableLine.h">
-      <Filter>Header Files\CameraMaterialGroupWnd\MaterialWindow</Filter>
-    </ClInclude>
     <ClInclude Include="OriginalWnd\NonInteractiveCheckDelegate.h">
       <Filter>Header Files\OriginalWnd</Filter>
     </ClInclude>

+ 23 - 8
View/die-bonder-ui/Src/RewriteControl/ControlOperationPage.cpp

@@ -8,6 +8,7 @@ ControlOperationPage::ControlOperationPage(QWidget* parent)
 {
     ui->setupUi(this);
 	m_isEnable = false;
+    m_bRuler = false;
 
 
     InitWnd();
@@ -487,6 +488,10 @@ void ControlOperationPage::InitWnd()
 
     this->setMouseTracking(true);
     this->installEventFilter(this);
+    ui->RulerButton->setCheckable(true);
+    ui->PenButton->setCheckable(true);
+    ui->RulerButton->setChecked(false);
+    ui->RulerButton->setChecked(false);
 }
 
 void ControlOperationPage::CreateMouseMonitor(bool isStart)
@@ -631,23 +636,33 @@ void ControlOperationPage::setBlueBord() {
 
 void ControlOperationPage::on_RulerButton_clicked()
 {
-    if (m_currentMode == ModeImage) {
-        if (m_currentImageView->rulerVisibale()) {
-            m_currentImageView->endRuler();
-        }
-        else {
-            m_currentImageView->startRuler();
+    if (nullptr == m_currentImageView)
+        return;
+    if (ui->RulerButton->isChecked()) {
+        m_currentImageView->addRuler();
+        if (ui->PenButton->isChecked()) {
+            ui->PenButton->setChecked(false);
+            m_currentImageView->setIsDrawing(false);
+            ui->PenButton->setStyleSheet("QPushButton { background-color: none; }");
         }
     }
+    else {
+        m_currentImageView->cancelRuler();
+    }
 }
 
 void ControlOperationPage::on_PenButton_clicked() {
+    if (nullptr == m_currentImageView)
+        return;
     m_isEnable = !m_isEnable;
-
-    if (m_isEnable) {
+    if (ui->PenButton->isChecked()) {
         //ui->Operatewidget->setIsDrawing(true);
         m_currentImageView->setIsDrawing(true);
         ui->PenButton->setStyleSheet("QPushButton { background-color: #808FFF; }");
+        if (ui->RulerButton->isChecked()) {
+            ui->RulerButton->setChecked(false);
+            m_currentImageView->cancelRuler();
+        }
     }
     else {
         //ui->Operatewidget->setIsDrawing(false);

+ 1 - 0
View/die-bonder-ui/Src/RewriteControl/ControlOperationPage.h

@@ -131,6 +131,7 @@ private:
     Bond*                       m_bond                  = nullptr;
     ImageView*                  m_currentImageView      = nullptr;
     bool                        m_isEnable;
+    bool                        m_bRuler;
     QPoint                      m_pressPos; // 记录鼠标按下位置
 
     /**用作定时使用,后面移动到整个类里面,目前先实现功能

+ 6 - 0
View/die-bonder-ui/Src/RewriteControl/ControlOperationPage.ui

@@ -91,6 +91,9 @@
       <property name="text">
        <string/>
       </property>
+      <property name="checkable">
+       <bool>true</bool>
+      </property>
      </widget>
     </item>
     <item>
@@ -98,6 +101,9 @@
       <property name="text">
        <string/>
       </property>
+      <property name="checkable">
+       <bool>true</bool>
+      </property>
      </widget>
     </item>
     <item>

+ 2 - 2
View/die-bonder-ui/Src/Sql/SqlOperation.cpp

@@ -277,7 +277,7 @@ int SqlOperation::loadAllControlData()
 
     m_allControlData.clear();
     QList<QString> moduleTableNameList;
-    moduleTableNameList.append(BONDHEAD_CONFIG_TABLE_NAME);
+    //moduleTableNameList.append(BONDHEAD_CONFIG_TABLE_NAME);
     moduleTableNameList.append(WAFERHEAD_CONFIG_TABLE_NAME);
     moduleTableNameList.append(WAFFLEHEAD_CONFIG_TABLE_NAME);
     moduleTableNameList.append(EJECTOR_CONFIG_TABLE_NAME);
@@ -405,7 +405,7 @@ int SqlOperation::loadGivenTableControlData(QString tableName, ST_TABLE_CONTROL_
                 value.iUserGrade = queryBond.value("UserGrade").toString().toInt(&ok, 16);
                 value.strName = queryBond.value("Name").toString().toStdString();
                 value.strDescribe = queryBond.value("Describe").toString().toStdString();
-                //value.strDescribe_Eng = queryBond.value("Describe_Eng").toString().toStdString();
+                value.strDescribe_Eng = queryBond.value("Describe_Eng").toString().toStdString();
                 value.strType = queryBond.value("Type").toString().toStdString();
                 value.strValue = queryBond.value("Value").toString().toStdString();
                 value.strDefult = queryBond.value("Defult").toString().toStdString();

+ 25 - 0
View/die-bonder-ui/Src/SystemInfoPage/PageWnd/LanguageSwitchWnd.cpp

@@ -6,9 +6,34 @@ LanguageSwitchWnd::LanguageSwitchWnd(QWidget *parent)
     , ui(new Ui::LanguageSwitchWnd)
 {
     ui->setupUi(this);
+
+    if (gen_if.getLanguageValue() == 0)
+    {
+        ui->englishRadioButton->setChecked(true);
+    }
+    else
+    {
+        ui->chRadioButton->setChecked(true);
+    }
+
+    connect(ui->englishRadioButton, &QRadioButton::toggled, this, [this](bool checked) {
+        if (checked)
+            emit languageChanged("en");
+        });
+    connect(ui->chRadioButton, &QRadioButton::toggled, this, [this](bool checked) {
+        if (checked)
+            emit languageChanged("zh_CN");
+        });
 }
 
 LanguageSwitchWnd::~LanguageSwitchWnd()
 {
     delete ui;
 }
+
+void LanguageSwitchWnd::changeEvent(QEvent* event)
+{
+    if (event->type() == QEvent::LanguageChange) {
+        ui->retranslateUi(this);
+    }
+}

+ 10 - 0
View/die-bonder-ui/Src/SystemInfoPage/PageWnd/LanguageSwitchWnd.h

@@ -2,6 +2,8 @@
 #define LANGUAGESWITCHWND_H
 
 #include <QDialog>
+#include <QTranslator>
+#include "gen_interface.h"
 
 namespace Ui {
 class LanguageSwitchWnd;
@@ -15,8 +17,16 @@ public:
     explicit LanguageSwitchWnd(QWidget *parent = nullptr);
     ~LanguageSwitchWnd();
 
+protected:
+    void changeEvent(QEvent* event);
+
+signals:
+    void languageChanged(const QString& langCode);
+
 private:
     Ui::LanguageSwitchWnd *ui;
+
+    Gen_Interface gen_if;
 };
 
 #endif // LANGUAGESWITCHWND_H

+ 5 - 2
View/die-bonder-ui/Src/SystemInfoPage/SystemInfoPage.cpp

@@ -1,7 +1,6 @@
 #include "SystemInfoPage.h"
 #include "ui_SystemInfoPage.h"
 #include "PageWnd/AccountMaintenanceWnd.h"
-#include "PageWnd/LanguageSwitchWnd.h"
 
 SystemInfoPage::SystemInfoPage(QWidget *parent)
     : QMainWindow(parent)
@@ -9,6 +8,10 @@ SystemInfoPage::SystemInfoPage(QWidget *parent)
 {
     ui->setupUi(this);
 
+    languageWnd = new LanguageSwitchWnd();
+
+    connect(languageWnd, &LanguageSwitchWnd::languageChanged,
+        this, &SystemInfoPage::languageChanged);
 
     InitWnd();
 }
@@ -20,6 +23,6 @@ SystemInfoPage::~SystemInfoPage()
 
 void SystemInfoPage::InitWnd()
 {
-    ui->tabUi->addTab(new LanguageSwitchWnd(), tr("Language Switch", "语言切换"));
+    ui->tabUi->addTab(languageWnd, tr("Language Switch", "语言切换"));
     ui->tabUi->addTab(new AccountMaintenanceWnd(), tr("Account Maintenance", "账户维护"));
 }

+ 6 - 0
View/die-bonder-ui/Src/SystemInfoPage/SystemInfoPage.h

@@ -2,6 +2,7 @@
 #define SYSTEMINFOPAGE_H
 
 #include <QMainWindow>
+#include "PageWnd/LanguageSwitchWnd.h"
 
 namespace Ui {
 class SystemInfoPage;
@@ -16,8 +17,13 @@ public:
     ~SystemInfoPage();
 
     void InitWnd();
+
+signals:
+    void languageChanged(const QString& langCode);
+
 private:
     Ui::SystemInfoPage *ui;
+    LanguageSwitchWnd* languageWnd = nullptr;
 };
 
 #endif // SYSTEMINFOPAGE_H

+ 292 - 158
View/die-bonder-ui/dark.qss

@@ -163,15 +163,15 @@ OriginalWnd QWidget#Toptitlebar QPushButton#CalibrationButton
     background: #4AA2FF;
 }
 
-QWidget#Toptitlebar QPushButton#MachineLink
+QWidget#Toptitlebar QPushButton#pushButton_2
 {
-    border-radius: 4px;
+    background-color: transparent;
     image: url(:/images/TopStatusBar/MachineLink.png);
 }
 
-QWidget#Toptitlebar QPushButton#HostStatus
+QWidget#Toptitlebar QPushButton#pushButton_3
 {
-    border-radius: 4px;
+    background-color: transparent;
     image: url(:/images/TopStatusBar/HostStatus.png);
 }
 
@@ -236,28 +236,7 @@ OriginalWnd QWidget#widget QToolButton#SingleImageButton
     qproperty-icon:url(:/images/deep/Demo001_3.png);
 }
 
-/* SingleCameraOperationWnd */
-QComboBox
-{
-    border:1px solid #6D6FB6;
-    border-radius:6px;
-    background: #4C4FA6;
-    color: #FFFFFF;
-}
 
-QComboBox::down-arrow
-{
-    image: url(:/images/drop.png);
-    width: 30px;
-    height:30px;
-}
-
-QComboBox::drop-down
-{
-    width:20px;
-    border:none;
-    padding-right:5px;
-}
 
 SingleCameraOperationWnd QWidget#centralwidget,
 MainAndSecondaryCamerasWnd QWidget#centralwidget,
@@ -388,30 +367,7 @@ ChartsAndCamerasWnd QWidget#Toolbar QPushButton
     border:none;
 }
 
-SingleCameraOperationWnd QFrame#line,
-SingleCameraOperationWnd QFrame#line_3,
-SingleCameraOperationWnd QFrame#line_4,
-SingleCameraOperationWnd QFrame#line_5,
-SingleCameraOperationWnd QFrame#line_6,
-MainAndSecondaryCamerasWnd QFrame#line_1,
-MainAndSecondaryCamerasWnd QFrame#line_3,
-MainAndSecondaryCamerasWnd QFrame#line_4,
-MainAndSecondaryCamerasWnd QFrame#line_5,
-MainAndSecondaryCamerasWnd QFrame#line_6,
-MainAndSecondaryCamerasWnd QFrame#line_11,
-MainAndSecondaryCamerasWnd QFrame#line_12,
-MainAndSecondaryCamerasWnd QFrame#line_13,
-MainAndSecondaryCamerasWnd QFrame#line_14,
-MainAndSecondaryCamerasWnd QFrame#line_15,
-ChartsAndCamerasWnd QFrame#line,
-ChartsAndCamerasWnd QFrame#line_3,
-ChartsAndCamerasWnd QFrame#line_4,
-ChartsAndCamerasWnd QFrame#line_5,
-ChartsAndCamerasWnd QFrame#line_6
-{
-    border:none;
-    background-color: rgba(255, 255, 255, 0.5);
-}
+
 
 SingleCameraOperationWnd QPushButton#pushButton_2,
 SingleCameraOperationWnd QLabel#label_Percentage,
@@ -425,118 +381,9 @@ ChartsAndCamerasWnd QLabel#label_Percentage
     color: #FFFFFF;
 }
 
-SingleCameraOperationWnd QPushButton#ZoomUpButton,
-MainAndSecondaryCamerasWnd QPushButton#LeftZoomUpButton,
-MainAndSecondaryCamerasWnd QPushButton#RightZoomUpButton,
-ChartsAndCamerasWnd QPushButton#ZoomUpButton
-{
-    image: url(:/images/deep/zoom up.png);
-}
-
-SingleCameraOperationWnd QPushButton#ZoomOutButton,
-MainAndSecondaryCamerasWnd QPushButton#LeftZoomOutButton,
-MainAndSecondaryCamerasWnd QPushButton#RightZoomOutButton,
-ChartsAndCamerasWnd QPushButton#ZoomOutButton
-{
-    image: url(:/images/deep/zoom out.png);
-}
-
-SingleCameraOperationWnd QPushButton#RulerButton,
-MainAndSecondaryCamerasWnd QPushButton#LeftRulerButton,
-MainAndSecondaryCamerasWnd QPushButton#RightRulerButton,
-ChartsAndCamerasWnd QPushButton#RulerButton
-{
-    image: url(:/images/deep/ruler.png);
-}
-
-SingleCameraOperationWnd QPushButton#PenButton,
-MainAndSecondaryCamerasWnd QPushButton#LeftPenButton,
-MainAndSecondaryCamerasWnd QPushButton#RightPenButton,
-ChartsAndCamerasWnd QPushButton#PenButton
-{
-    image: url(:/images/deep/pen.png);
-}
-
-/* 为垂直滑块设置样式 */
-QSlider#RedLightverticalSlider::groove:vertical,
-QSlider#RedLightverticalSlider_L::groove:vertical,
-QSlider#RedLightverticalSlider_2::groove:vertical
-{
-    height: 56px;
-    width: 3px;
-    background: red;
-}
 
-QSlider#GreenLightverticalSlider::groove:vertical,
-QSlider#GreenLightverticalSlider_L::groove:vertical,
-QSlider#GreenLightverticalSlider_5::groove:vertical
-{
-    height: 56px;
-    width: 3px;
-    background: Green;
-}
-
-QSlider#BlueLightverticalSlider::groove:vertical,
-QSlider#BlueLightverticalSlider_L::groove:vertical
-{
-    height: 56px;
-    width: 3px;
-    background: Blue;
-}
-
-QSlider#DotLightverticalSlider::groove:vertical,
-QSlider#DotLightverticalSlider_L::groove:vertical,
-QSlider#DotLightverticalSlider_2::groove:vertical
-{
-    height: 56px;
-    width: 3px;
-    background: yellow;
-}
-
-/*QSlider::sub-page:vertical {
-    height: 56px;
-    width: 3px;
-    background: rgba(78, 81, 206, 0.25);
-}*/
-
-QSlider#RedLightverticalSlider::handle:vertical,
-QSlider#RedLightverticalSlider_L::handle:vertical,
-QSlider#RedLightverticalSlider_2::handle:vertical
-{
-    border-image: url(:/images/LightGroup/red.png);
-    height: 6px;
-    margin: 0px -5px 0px -5px;
-    border-radius: 4px;
-}
-
-QSlider#GreenLightverticalSlider::handle:vertical,
-QSlider#GreenLightverticalSlider_L::handle:vertical,
-QSlider#GreenLightverticalSlider_5::handle:vertical
-{
-    border-image: url(:/images/LightGroup/green.png);
-    height: 6px;
-    margin: 0px -5px 0px -5px;
-    border-radius: 4px;
-}
 
-QSlider#BlueLightverticalSlider::handle:vertical,
-QSlider#BlueLightverticalSlider_L::handle:vertical
-{
-    border-image: url(:/images/LightGroup/blue.png);
-    height: 6px;
-    margin: 0px -5px 0px -5px;
-    border-radius: 4px;
-}
 
-QSlider#DotLightverticalSlider::handle:vertical,
-QSlider#DotLightverticalSlider_L::handle:vertical,
-QSlider#DotLightverticalSlider_2::handle:vertical
-{
-    border-image: url(:/images/LightGroup/yellow.png);
-    height: 6px;
-    margin: 0px -5px 0px -5px;
-    border-radius: 4px;
-}
 
 QScrollArea {
     background-color: transparent;
@@ -680,3 +527,290 @@ ChartsAndCamerasWnd QLabel#PurpleVerticalBar
 {
     image: url(:/images/Participation display/Purple vertical bars.png);
 }
+
+
+
+/* ControlOperationPage 类的样式封装 */
+ControlOperationPage QHBoxLayout#horizontalLayout_2
+{
+    border-radius: 6px;
+    background: #4E53B8;
+}
+
+
+ControlOperationPage QHBoxLayout#horizontalLayout_2 QPushButton
+{
+    border-radius: 6px;
+    background: #4E53B8;
+    border:none;
+}
+
+/* 悬停时的样式 */
+ControlOperationPage QHBoxLayout#horizontalLayout_2 QPushButton:hover
+{
+    background: #A6AFFF; /* 悬停时的背景颜色 */
+}
+
+/* 点击时的样式 */
+ControlOperationPage QHBoxLayout#horizontalLayout_2 QPushButton:pressed
+{
+    background: #808FFF; /* 点击时的背景颜色 */
+}
+
+ControlOperationPage QPushButton#LiveButton
+{
+    color: #FFFFFF;
+    border-radius: 6px;
+    background:qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #949FE8,stop:1 #2D309B);
+}
+
+
+ControlOperationPage QPushButton#ZoomUpButton
+{
+    image: url(:/images/light/zoom up.png);
+    border-radius: 6px;
+    background: #CBD0FF;
+    border: none;
+}
+
+ControlOperationPage QPushButton#ZoomOutButton
+{
+    image: url(:/images/light/zoom out.png);
+    border-radius: 6px;
+    background: #CBD0FF;
+    border: none;
+}
+
+
+ControlOperationPage QPushButton#RulerButton
+{
+    image: url(:/images/light/ruler.png);
+    border-radius: 6px;
+    background: #CBD0FF;
+    border: none;
+}
+
+
+ControlOperationPage QPushButton#PenButton
+{
+    image: url(:/images/light/pen.png);
+    border-radius: 6px;
+    background: #CBD0FF;
+    border: none;
+}
+
+ControlOperationPage QPushButton#switchJoystickBut
+{
+    border-radius: 6px;
+    background: #CBD0FF;
+    border: none;
+
+}
+ControlOperationPage QPushButton#switchJoystickBut:pressed,
+ControlOperationPage QPushButton#PenButton:pressed,
+ControlOperationPage QPushButton#RulerButton:pressed,
+ControlOperationPage QPushButton#ZoomOutButton:pressed,
+ControlOperationPage QPushButton#ZoomUpButton:pressed,
+ControlOperationPage QPushButton#switchJoystickBut:pressed
+{
+    background: #808FFF; /* 点击时的背景颜色 */
+}
+
+
+ControlOperationPage QPushButton#switchJoystickBut:hover,
+ControlOperationPage QPushButton#PenButton:hover,
+ControlOperationPage QPushButton#RulerButton:hover,
+ControlOperationPage QPushButton#ZoomOutButton:hover,
+ControlOperationPage QPushButton#ZoomUpButton:hover,
+ControlOperationPage QPushButton#switchJoystickBut:hover
+{
+    background: #A6AFFF; /* 悬停时的背景颜色 */
+}
+
+
+ControlOperationPage QLabel#label_Percentage
+{
+    color: #4E51CE;
+    border-radius: 6px;
+    background: #CBD0FF;
+    border: none;
+}
+
+Group QComboBox
+{
+    border:1px solid #BABBDC;
+    border-radius:6px;
+    background:#4C4FA6;
+}
+
+Group QComboBox::down-arrow
+{
+    image: url(:/images/drop.png);
+    width: 30px;
+    height:30px;
+}
+
+Group QComboBox::drop-down
+{
+    width:20px;
+    border:none;
+    padding-right:5px;
+}
+ControlOperationPage QComboBox
+{
+    border:1px solid #6D6FB6;
+    border-radius:6px;
+    background: #4C4FA6;
+    color: #4C4FA6;
+}
+
+ControlOperationPage QComboBox::down-arrow
+{
+    image: url(:/images/drop.png);
+    width: 30px;
+    height:30px;
+}
+
+ControlOperationPage QComboBox::drop-down
+{
+    width:20px;
+    border:none;
+    padding-right:5px;
+}
+
+ControlOperationPage QWidget#BackGround
+{
+    background: #FFFFFF;
+    border: 1px solid #BABBDC;
+    border-radius: 0px;
+}
+
+/* LightJoystickSwitchPage */
+
+LightJoystickSwitchPage{
+   background: #D6D8ED; 
+}
+
+LightJoystickSwitchPage QTabWidget#switchTabWidget
+{
+    border-radius: 10px;
+    background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #F1F4FD, stop: 1 #E5E4F6);
+}
+
+LightJoystickSwitchPage QTabWidget#switchTabWidget QWidget,
+LightJoystickSwitchPage QTabWidget#switchTabWidget QWidget#GreenLightTab QWidget,
+LightJoystickSwitchPage QTabWidget#switchTabWidget QWidget#JoystickTab QWidget
+
+{
+    background: #D6D8ED;
+}
+
+LightJoystickSwitchPage QSlider#RedLightverticalSlider::handle:vertical
+{
+    border-image: url(:/images/LightGroup/red.png);
+    height: 6px;
+    margin: 0px -5px 0px -5px;
+    border-radius: 4px;
+}
+
+LightJoystickSwitchPage QSlider#GreenLightverticalSlider::handle:vertical
+{
+    border-image: url(:/images/LightGroup/green.png);
+    height: 6px;
+    margin: 0px -5px 0px -5px;
+    border-radius: 4px;
+}
+
+LightJoystickSwitchPage QSlider#BlueLightverticalSlider::handle:vertical
+{
+    border-image: url(:/images/LightGroup/blue.png);
+    height: 6px;
+    margin: 0px -5px 0px -5px;
+    border-radius: 4px;
+}
+
+LightJoystickSwitchPage QSlider#DotLightverticalSlider::handle:vertical
+{
+    border-image: url(:/images/LightGroup/yellow.png);
+    height: 6px;
+    margin: 0px -5px 0px -5px;
+    border-radius: 4px;
+}
+
+
+/* 为垂直滑块设置样式 */
+LightJoystickSwitchPage QSlider#RedLightverticalSlider::groove:vertical
+{
+    height: 56px;
+    width: 3px;
+    background: red;
+}
+
+/* 为垂直滑块设置样式 */
+LightJoystickSwitchPage QSlider#GreenLightverticalSlider::groove:vertical
+{
+    height: 56px;
+    width: 3px;
+    background: green;
+}
+
+/* 为垂直滑块设置样式 */
+LightJoystickSwitchPage QSlider#BlueLightverticalSlider::groove:vertical
+{
+    height: 56px;
+    width: 3px;
+    background: blue;
+}
+
+/* 为垂直滑块设置样式 */
+LightJoystickSwitchPage QSlider#DotLightverticalSlider::groove:vertical
+{
+    height: 56px;
+    width: 3px;
+    background: yellow;
+}
+
+LightJoystickSwitchPage QProgressBar 
+{
+    border: 0.5px solid grey;
+    border-radius: 5px;
+    background-color: transparent;
+}
+
+LightJoystickSwitchPage QProgressBar#RedLightprogressBar::chunk
+{
+    border-radius: 3px;
+    background-color: red;
+    height: 1px;
+}
+
+
+LightJoystickSwitchPage QProgressBar#GreenLightprogressBar::chunk
+{
+    border-radius: 3px;
+    background-color: Green;
+    height: 1px;
+}
+
+
+LightJoystickSwitchPage QProgressBar#BlueLightprogressBar::chunk
+{
+    border-radius: 3px;
+    background-color: Blue;
+    height: 1px;
+}
+
+LightJoystickSwitchPage QProgressBar#DotLightprogressBar::chunk
+{
+    border-radius: 3px;
+    background-color: yellow;
+    height: 1px;
+}
+
+
+LightJoystickSwitchPage QTabWidget#switchTabWidget QLineEdit
+{
+    border-radius: 6px;
+    border: 1px solid #BABBDC;
+}
+

+ 2 - 0
View/die-bonder-ui/res.qrc

@@ -101,5 +101,7 @@
         <file>images/LightGroup/red.png</file>
         <file>images/LightGroup/yellow.png</file>
         <file>images/deep/logo1.png</file>
+        <file>SBT_zh_CN.qm</file>
+        <file>SBT_en.qm</file>
     </qresource>
 </RCC>