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