From df53287060966d78ffccac78342fb5d0a028f835 Mon Sep 17 00:00:00 2001
From: sola.lu <sola.lu.greentest.com.cn>
Date: 周二, 10 6月 2025 19:03:07 +0800
Subject: [PATCH] 1.添加翻译,about,手册,login这几个按钮到标题栏。

---
 examples/shared/widgetframe/windowbar.cpp |  184 ++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 168 insertions(+), 16 deletions(-)

diff --git a/examples/shared/widgetframe/windowbar.cpp b/examples/shared/widgetframe/windowbar.cpp
index fba9a49..98ce86e 100644
--- a/examples/shared/widgetframe/windowbar.cpp
+++ b/examples/shared/widgetframe/windowbar.cpp
@@ -1,7 +1,12 @@
-#include "WindowBar.h"
-#include "WindowBar_p.h"
+// Copyright (C) 2023-2024 Stdware Collections (https://www.github.com/stdware)
+// Copyright (C) 2021-2023 wangwenx190 (Yuhang Zhao)
+// SPDX-License-Identifier: Apache-2.0
+
+#include "windowbar.h"
+#include "windowbar_p.h"
 
 #include <QtCore/QDebug>
+#include <QtCore/QLocale>
 #include <QtGui/QtEvents>
 
 namespace QWK {
@@ -12,13 +17,16 @@
         autoIcon = false;
     }
 
-    WindowBarPrivate::~WindowBarPrivate() {
-    }
+    WindowBarPrivate::~WindowBarPrivate() = default;
 
     void WindowBarPrivate::init() {
         Q_Q(WindowBar);
         layout = new QHBoxLayout();
-        layout->setMargin(0);
+        if (QLocale::system().textDirection() == Qt::RightToLeft) {
+            layout->setDirection(QBoxLayout::RightToLeft);
+        }
+
+        layout->setContentsMargins(QMargins());
         layout->setSpacing(0);
         for (int i = IconButton; i <= CloseButton; ++i) {
             insertDefaultSpace(i);
@@ -54,8 +62,7 @@
     WindowBar::WindowBar(QWidget *parent) : WindowBar(*new WindowBarPrivate(), parent) {
     }
 
-    WindowBar::~WindowBar() {
-    }
+    WindowBar::~WindowBar() = default;
 
     QMenuBar *WindowBar::menuBar() const {
         Q_D(const WindowBar);
@@ -72,19 +79,48 @@
         return static_cast<QAbstractButton *>(d->widgetAt(WindowBarPrivate::IconButton));
     }
 
+    QAbstractButton *WindowBar::pinButton() const {
+        Q_D(const WindowBar);
+        return static_cast<QAbstractButton *>(d->widgetAt(WindowBarPrivate::PinButton));
+    }
+
     QAbstractButton *WindowBar::minButton() const {
         Q_D(const WindowBar);
-        return static_cast<QAbstractButton *>(d->widgetAt(WindowBarPrivate::MinimumButton));
+        return static_cast<QAbstractButton *>(d->widgetAt(WindowBarPrivate::MinimizeButton));
     }
 
     QAbstractButton *WindowBar::maxButton() const {
         Q_D(const WindowBar);
-        return static_cast<QAbstractButton *>(d->widgetAt(WindowBarPrivate::MaximumButton));
+        return static_cast<QAbstractButton *>(d->widgetAt(WindowBarPrivate::MaximizeButton));
     }
 
     QAbstractButton *WindowBar::closeButton() const {
         Q_D(const WindowBar);
         return static_cast<QAbstractButton *>(d->widgetAt(WindowBarPrivate::CloseButton));
+    }
+
+    QAbstractButton *WindowBar::loginButton() const
+    {
+        Q_D(const WindowBar);
+        return static_cast<QAbstractButton *>(d->widgetAt(WindowBarPrivate::LoginButton));
+    }
+
+    QAbstractButton *WindowBar::languageButton() const
+    {
+        Q_D(const WindowBar);
+        return static_cast<QAbstractButton *>(d->widgetAt(WindowBarPrivate::LanguageButton));
+    }
+
+    QAbstractButton *WindowBar::manualButton() const
+    {
+        Q_D(const WindowBar);
+        return static_cast<QAbstractButton *>(d->widgetAt(WindowBarPrivate::ManualButton));
+    }
+
+    QAbstractButton *WindowBar::aboutButton() const
+    {
+        Q_D(const WindowBar);
+        return static_cast<QAbstractButton *>(d->widgetAt(WindowBarPrivate::AboutButton));
     }
 
     void WindowBar::setMenuBar(QMenuBar *menuBar) {
@@ -124,6 +160,17 @@
         btn->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred);
     }
 
+    void WindowBar::setPinButton(QAbstractButton *btn) {
+        Q_D(WindowBar);
+        auto org = takePinButton();
+        if (org)
+            org->deleteLater();
+        if (!btn)
+            return;
+        d->setWidgetAt(WindowBarPrivate::PinButton, btn);
+        connect(btn, &QAbstractButton::clicked, this, &WindowBar::pinRequested);
+    }
+
     void WindowBar::setMinButton(QAbstractButton *btn) {
         Q_D(WindowBar);
         auto org = takeMinButton();
@@ -131,7 +178,7 @@
             org->deleteLater();
         if (!btn)
             return;
-        d->setWidgetAt(WindowBarPrivate::MinimumButton, btn);
+        d->setWidgetAt(WindowBarPrivate::MinimizeButton, btn);
         connect(btn, &QAbstractButton::clicked, this, &WindowBar::minimizeRequested);
     }
 
@@ -142,7 +189,7 @@
             org->deleteLater();
         if (!btn)
             return;
-        d->setWidgetAt(WindowBarPrivate::MaximumButton, btn);
+        d->setWidgetAt(WindowBarPrivate::MaximizeButton, btn);
         connect(btn, &QAbstractButton::clicked, this, &WindowBar::maximizeRequested);
     }
 
@@ -155,6 +202,54 @@
             return;
         d->setWidgetAt(WindowBarPrivate::CloseButton, btn);
         connect(btn, &QAbstractButton::clicked, this, &WindowBar::closeRequested);
+    }
+
+    void WindowBar::setLoginButton(QAbstractButton *btn)
+    {
+        Q_D(WindowBar);
+        auto org = takeLoginButton();
+        if (org)
+            org->deleteLater();
+        if (!btn)
+            return;
+        d->setWidgetAt(WindowBarPrivate::LoginButton, btn);
+        connect(btn, &QAbstractButton::clicked, this, &WindowBar::loginRequested);
+    }
+
+    void WindowBar::setLanguageButton(QAbstractButton *btn)
+    {
+        Q_D(WindowBar);
+        auto org = takeLanguageButton();
+        if(org)
+            org->deleteLater();
+        if(!btn)
+            return;
+        d->setWidgetAt(WindowBarPrivate::LanguageButton, btn);
+        connect(btn, &QAbstractButton::clicked, this, &WindowBar::languageRequested);
+    }
+
+    void WindowBar::setManualButton(QAbstractButton *btn)
+    {
+        Q_D(WindowBar);
+        auto org = takeManualButton();
+        if(org)
+            org->deleteLater();
+        if(!btn)
+            return;
+        d->setWidgetAt(WindowBarPrivate::ManualButton, btn);
+        connect(btn, &QAbstractButton::clicked, this, &WindowBar::manualRequested);
+    }
+
+    void WindowBar::setAboutButton(QAbstractButton *btn)
+    {
+        Q_D(WindowBar);
+        auto org = takeAboutButton();
+        if(org)
+            org->deleteLater();
+        if(!btn)
+            return;
+        d->setWidgetAt(WindowBarPrivate::AboutButton, btn);
+        connect(btn, &QAbstractButton::clicked, this, &WindowBar::aboutRequested);
     }
 
     QMenuBar *WindowBar::takeMenuBar() {
@@ -172,9 +267,19 @@
         return static_cast<QAbstractButton *>(d->takeWidgetAt(WindowBarPrivate::IconButton));
     }
 
+    QAbstractButton *WindowBar::takePinButton() {
+        Q_D(WindowBar);
+        auto btn = static_cast<QAbstractButton *>(d->takeWidgetAt(WindowBarPrivate::PinButton));
+        if (!btn) {
+            return nullptr;
+        }
+        disconnect(btn, &QAbstractButton::clicked, this, &WindowBar::pinRequested);
+        return btn;
+    }
+
     QAbstractButton *WindowBar::takeMinButton() {
         Q_D(WindowBar);
-        auto btn = static_cast<QAbstractButton *>(d->takeWidgetAt(WindowBarPrivate::MinimumButton));
+        auto btn = static_cast<QAbstractButton *>(d->takeWidgetAt(WindowBarPrivate::MinimizeButton));
         if (!btn) {
             return nullptr;
         }
@@ -184,7 +289,7 @@
 
     QAbstractButton *WindowBar::takeMaxButton() {
         Q_D(WindowBar);
-        auto btn = static_cast<QAbstractButton *>(d->takeWidgetAt(WindowBarPrivate::MaximumButton));
+        auto btn = static_cast<QAbstractButton *>(d->takeWidgetAt(WindowBarPrivate::MaximizeButton));
         if (!btn) {
             return nullptr;
         }
@@ -199,6 +304,50 @@
             return nullptr;
         }
         disconnect(btn, &QAbstractButton::clicked, this, &WindowBar::closeRequested);
+        return btn;
+    }
+
+    QAbstractButton *WindowBar::takeLoginButton()
+    {
+        Q_D(WindowBar);
+        auto btn = static_cast<QAbstractButton*>(d->takeWidgetAt(WindowBarPrivate::LoginButton));
+        if(!btn){
+            return nullptr;
+        }
+        disconnect(btn, &QAbstractButton::clicked, this, &WindowBar::loginRequested);
+        return btn;
+    }
+
+    QAbstractButton *WindowBar::takeLanguageButton()
+    {
+        Q_D(WindowBar);
+        auto btn = static_cast<QAbstractButton*>(d->takeWidgetAt(WindowBarPrivate::LanguageButton));
+        if(!btn){
+            return nullptr;
+        }
+        disconnect(btn, &QAbstractButton::clicked, this, &WindowBar::languageRequested);
+        return btn;
+    }
+
+    QAbstractButton *WindowBar::takeManualButton()
+    {
+        Q_D(WindowBar);
+        auto btn = static_cast<QAbstractButton*>(d->takeWidgetAt(WindowBarPrivate::ManualButton));
+        if(!btn){
+            return nullptr;
+        }
+        disconnect(btn, &QAbstractButton::clicked, this, &WindowBar::manualRequested);
+        return btn;
+    }
+
+    QAbstractButton *WindowBar::takeAboutButton()
+    {
+        Q_D(WindowBar);
+        auto btn = static_cast<QAbstractButton*>(d->takeWidgetAt(WindowBarPrivate::AboutButton));
+        if(!btn){
+            return nullptr;
+        }
+        disconnect(btn, &QAbstractButton::clicked, this, &WindowBar::aboutRequested);
         return btn;
     }
 
@@ -248,23 +397,26 @@
             QLabel *label = titleLabel();
             QAbstractButton *maxBtn = maxButton();
             switch (event->type()) {
-                case QEvent::WindowIconChange:
+                case QEvent::WindowIconChange: {
                     if (d_ptr->autoIcon && iconBtn) {
                         iconBtn->setIcon(w->windowIcon());
                         iconChanged(w->windowIcon());
                     }
                     break;
-                case QEvent::WindowTitleChange:
+                }
+                case QEvent::WindowTitleChange: {
                     if (d_ptr->autoTitle && label) {
                         label->setText(w->windowTitle());
                         titleChanged(w->windowTitle());
                     }
                     break;
-                case QEvent::WindowStateChange:
+                }
+                case QEvent::WindowStateChange: {
                     if (maxBtn) {
                         maxBtn->setChecked(w->isMaximized());
                     }
                     break;
+                }
                 default:
                     break;
             }

--
Gitblit v1.9.1