Files
eUi/configSettingWidget.h
T
2025-10-27 13:49:44 +08:00

416 lines
13 KiB
C++

#include <qwidget.h>
#include <qlayout.h>
#include <qlabel.h>
#include <qpushbutton.h>
#include <qapplication.h>
#include <qscreen.h>
#include <qrect.h>
#include <unordered_map>
#include <QStackedWidget>
#include <vector>
#include <qlineedit.h>
#include <uiModule/components/fancyButton.h>
#include <qscrollarea.h>
#include <qcheckbox.h>
#include <qobject.h>
#include <qmainwindow.h>
#include <qmessagebox.h>
#include <qregularexpression.h>
#include <qtimer.h>
#include <generalJsonParsing.hpp>
#include <qspinbox.h>
#include <hardwareInfo.h>
#include "git_version.h"
#include <appConfig.h>
#include <qgroupbox.h>
#include <qframe.h>
#include <qcombobox.h>
class configSettingWidget :public QWidget{
Q_OBJECT
public:
QVBoxLayout* m_layout;
QScrollArea* scrollArea;
QWidget* contentWidget;
QHBoxLayout* btnLayout;
std::vector<gradientButton*>btns;
QLabel* icon, * Title;
int currentPageIndex = 0;
configSettingWidget(appConfig* _configIn):_config(_configIn){
QPalette palette;
palette.setColor(QPalette::WindowText, Qt::white);
QFont font("微软雅黑", 24, QFont::Bold);
QFont font2("微软雅黑", 8, QFont::Bold);
this->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
this->setObjectName("configSettingWidget");
this->setStyleSheet(R"(
QWidget#configSettingWidget {
background: rgb(40, 45, 50);
}
)");
// 创建主布局
QVBoxLayout* mainLayout = new QVBoxLayout(this);
mainLayout->setContentsMargins(0, 0, 0, 0);
mainLayout->setSpacing(0);
// 创建滚动区域
scrollArea = new QScrollArea();
scrollArea->setObjectName("configScrollArea");
scrollArea->setStyleSheet(R"(
QScrollArea#configScrollArea {
border: none;
background: transparent;
}
QScrollBar:vertical {
background: rgb(60, 65, 70);
width: 12px;
border-radius: 6px;
}
QScrollBar::handle:vertical {
background: rgb(100, 105, 110);
border-radius: 6px;
min-height: 20px;
}
QScrollBar::handle:vertical:hover {
background: rgb(120, 125, 130);
}
)");
scrollArea->setWidgetResizable(true);
scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
// 创建内容容器
contentWidget = new QWidget();
contentWidget->setObjectName("contentWidget");
contentWidget->setStyleSheet("QWidget#contentWidget { background: transparent; }");
m_layout = new QVBoxLayout(contentWidget);
m_layout->setContentsMargins(20, 20, 20, 20);
m_layout->setSpacing(15);
m_layout->setAlignment(Qt::AlignLeft|Qt::AlignTop);
// 创建标题区域容器
QWidget* titleWidget = new QWidget();
titleWidget->setObjectName("titleWidget");
titleWidget->setStyleSheet(R"(
QWidget#titleWidget {
background: rgb(50, 55, 60);
border-radius: 10px;
padding: 15px;
}
)");
QVBoxLayout* titleContainerLayout = new QVBoxLayout(titleWidget);
titleContainerLayout->setContentsMargins(15, 15, 15, 15);
titleContainerLayout->setSpacing(10);
// 主标题和版本信息布局
QHBoxLayout* titleLayout = new QHBoxLayout();
titleLayout->setContentsMargins(0, 0, 0, 0);
Title = new QLabel(QString::fromStdString(Translation::getInstance().translate("Setting")));
Title->setFont(font);
Title->setPalette(palette);
Title->setAlignment(Qt::AlignLeft | Qt::AlignVCenter);
QLabel* versionShow = new QLabel(QString(u8"当前版本: v%1 | 提交版本: %2").arg(QString::fromStdString(softwareVersion)).arg(GIT_COMMIT_HASH));
versionShow->setFont(font2);
versionShow->setPalette(palette);
versionShow->setAlignment(Qt::AlignRight | Qt::AlignVCenter);
versionShow->setStyleSheet("color: rgb(180, 180, 180);");
titleLayout->addWidget(Title);
titleLayout->addStretch();
titleLayout->addWidget(versionShow);
titleContainerLayout->addLayout(titleLayout);
m_layout->addWidget(titleWidget);
//语言设置
{
// 创建语言设置分组容器
QGroupBox* languageGroupBox = new QGroupBox(QString::fromStdString(Translation::getInstance().translate("Language Settings")));
languageGroupBox->setObjectName("languageGroupBox");
languageGroupBox->setStyleSheet(R"(
QGroupBox#languageGroupBox {
background: rgb(50, 55, 60);
border-radius: 10px;
font-family: "微软雅黑";
font-size: 14px;
font-weight: bold;
color: white;
padding-top: 20px;
}
QGroupBox#languageGroupBox::title {
subcontrol-origin: margin;
left: 10px;
padding: 0 10px 0 10px;
}
)");
QVBoxLayout* languageMainLayout = new QVBoxLayout(languageGroupBox);
languageMainLayout->setContentsMargins(15, 15, 15, 15);
languageMainLayout->setSpacing(10);
QHBoxLayout* languageSelectLayout = new QHBoxLayout();
languageSelectLayout->setSpacing(15);
QLabel* languageSelectLabel = new QLabel(u8"选择语言/Language/Bahasa:");
languageSelectLabel->setFont(font2);
languageSelectLabel->setPalette(palette);
languageSelectLabel->setMinimumWidth(200);
QComboBox* languageSelect = new QComboBox();
languageSelect->setMinimumWidth(150);
languageSelect->setStyleSheet(R"(
QComboBox {
background-color: rgb(70, 75, 80);
border: 2px solid rgb(100, 105, 110);
border-radius: 5px;
padding: 5px;
color: white;
font-family: "微软雅黑";
font-size: 12px;
}
QComboBox:hover {
border-color: rgb(120, 125, 130);
}
QComboBox::drop-down {
border: none;
}
QComboBox::down-arrow {
image: url(:/icons/down-arrow.png);
}
)");
auto languagesKeys = _configIn->_translation->getSections();
int index = 0;
for (int i = 0; i < languagesKeys.size(); i++) {
languageSelect->addItem(QString::fromStdString(languagesKeys[i]));
if (languagesKeys[i] == _configIn->_translation->getCurrentLanguage())
index = i;
}
languageSelect->setCurrentIndex(index);
QLabel* languageSelectTip = new QLabel();
languageSelectTip->setFont(font2);
languageSelectTip->setPalette(palette);
languageSelectTip->setStyleSheet("color: rgb(255, 200, 100);");
languageSelectLayout->addWidget(languageSelectLabel);
languageSelectLayout->addWidget(languageSelect);
languageSelectLayout->addStretch();
languageSelectLayout->addWidget(languageSelectTip);
languageMainLayout->addLayout(languageSelectLayout);
connect(languageSelect, &QComboBox::currentTextChanged, [=](const QString& str) {
_configIn->_translation->setLanguage(str.toStdString());
languageSelectTip->setText(QString::fromStdString(Translation::getInstance().translate("will change after restart")));
});
m_layout->addWidget(languageGroupBox);
}
//控制台
{
// 创建控制台设置分组容器
QGroupBox* consoleGroupBox = new QGroupBox(QString::fromStdString(Translation::getInstance().translate("Window Settings")));
consoleGroupBox->setObjectName("consoleGroupBox");
consoleGroupBox->setStyleSheet(R"(
QGroupBox#consoleGroupBox {
background: rgb(50, 55, 60);
border-radius: 10px;
font-family: "微软雅黑";
font-size: 14px;
font-weight: bold;
color: white;
padding-top: 20px;
}
QGroupBox#consoleGroupBox::title {
subcontrol-origin: margin;
left: 10px;
padding: 0 10px 0 10px;
}
)");
QVBoxLayout* consoleMainLayout = new QVBoxLayout(consoleGroupBox);
consoleMainLayout->setContentsMargins(15, 15, 15, 15);
consoleMainLayout->setSpacing(10);
// 添加说明文字
QLabel* consoleDescription = new QLabel(QString::fromStdString(Translation::getInstance().translate("Control the visibility of the debug console window")));
consoleDescription->setFont(font2);
consoleDescription->setPalette(palette);
consoleDescription->setStyleSheet("color: rgb(180, 180, 180);");
consoleMainLayout->addWidget(consoleDescription);
QHBoxLayout* consoletLayout = new QHBoxLayout();
consoletLayout->setSpacing(15);
fancyButtonText* showConsoleBtn = new fancyButtonText(QString::fromStdString(Translation::getInstance().translate("showConsole")), 120, 35, "");
showConsoleBtn->setStyleSheet(R"(
fancyButtonText {
background: qlineargradient(x1:0, y1:0, x2:0, y2:1,
stop:0 rgb(80, 180, 80), stop:1 rgb(60, 140, 60));
border-radius: 8px;
color: white;
font-weight: bold;
}
fancyButtonText:hover {
background: qlineargradient(x1:0, y1:0, x2:0, y2:1,
stop:0 rgb(100, 200, 100), stop:1 rgb(80, 160, 80));
}
)");
fancyButtonText* hideConsoleBtn = new fancyButtonText(QString::fromStdString(Translation::getInstance().translate("hideConsole")), 120, 35, "");
hideConsoleBtn->setStyleSheet(R"(
fancyButtonText {
background: qlineargradient(x1:0, y1:0, x2:0, y2:1,
stop:0 rgb(180, 80, 80), stop:1 rgb(140, 60, 60));
border-radius: 8px;
color: white;
font-weight: bold;
}
fancyButtonText:hover {
background: qlineargradient(x1:0, y1:0, x2:0, y2:1,
stop:0 rgb(200, 100, 100), stop:1 rgb(160, 80, 80));
}
)");
fancyButtonText* setResolutionBtn = new fancyButtonText(u8"设置1920x1040");
setResolutionBtn->setStyleSheet(R"(
fancyButtonText {
background: qlineargradient(x1:0, y1:0, x2:0, y2:1,
stop:0 rgb(80, 130, 180), stop:1 rgb(60, 100, 140));
border-radius: 8px;
color: white;
font-weight: bold;
}
fancyButtonText:hover {
background: qlineargradient(x1:0, y1:0, x2:0, y2:1,
stop:0 rgb(100, 150, 200), stop:1 rgb(80, 120, 160));
}
)");
consoletLayout->addWidget(showConsoleBtn);
consoletLayout->addWidget(hideConsoleBtn);
consoletLayout->addWidget(setResolutionBtn);
consoletLayout->addStretch();
consoleMainLayout->addLayout(consoletLayout);
connect(showConsoleBtn, &QPushButton::clicked, [=]() {
ShowWindow(_config->consoleHandle, SW_SHOW);
});
connect(hideConsoleBtn, &QPushButton::clicked, [=]() {
ShowWindow(_config->consoleHandle, SW_HIDE);
});
connect(setResolutionBtn, &QPushButton::clicked, [=]() {
// 获取当前窗口的顶级窗口
QWidget* topWidget = this;
while (topWidget->parentWidget()) {
topWidget = topWidget->parentWidget();
}
// 设置窗口大小为1920x1080
topWidget->resize(1920, 1080);
// 可选:将窗口居中显示
QScreen* screen = QApplication::primaryScreen();
if (screen) {
QRect screenGeometry = screen->geometry();
int x = (screenGeometry.width() - 1920) / 2;
int y = (screenGeometry.height() - 1080) / 2;
if (x >= 0 && y >= 0) {
topWidget->move(x, y);
}
}
}); m_layout->addWidget(consoleGroupBox);
}
//杂项
{
QGroupBox* consoleGroupBox = new QGroupBox("杂项");
consoleGroupBox->setObjectName("toolsGroupBox");
consoleGroupBox->setStyleSheet(R"(
QGroupBox#consoleGroupBox {
background: rgb(50, 55, 60);
border-radius: 10px;
font-family: "微软雅黑";
font-size: 14px;
font-weight: bold;
color: white;
padding-top: 20px;
}
QGroupBox#consoleGroupBox::title {
subcontrol-origin: margin;
left: 10px;
padding: 0 10px 0 10px;
}
)");
QHboxLayout hLayout = new QHboxLayout(consoleGroupBox);
}
// 硬件信息区域
{
// 创建硬件信息分组容器
QGroupBox* hardwareGroupBox = new QGroupBox(QString::fromStdString(Translation::getInstance().translate("Hardware Information")));
hardwareGroupBox->setObjectName("hardwareGroupBox");
hardwareGroupBox->setStyleSheet(R"(
QGroupBox#hardwareGroupBox {
background: rgb(50, 55, 60);
border-radius: 10px;
font-family: "微软雅黑";
font-size: 14px;
font-weight: bold;
color: white;
padding-top: 20px;
}
QGroupBox#hardwareGroupBox::title {
subcontrol-origin: margin;
left: 10px;
padding: 0 10px 0 10px;
}
)");
QVBoxLayout* hardwareMainLayout = new QVBoxLayout(hardwareGroupBox);
hardwareMainLayout->setContentsMargins(15, 15, 15, 15);
hardwareMainLayout->setSpacing(10);
// 设置硬件信息组件的样式
_hardwareInfoWidget.setStyleSheet(R"(
QWidget {
background: transparent;
color: white;
font-family: "微软雅黑";
}
QLabel {
color: rgb(220, 220, 220);
font-size: 12px;
}
)");
hardwareMainLayout->addWidget(&_hardwareInfoWidget);
m_layout->addWidget(hardwareGroupBox);
}
// 添加底部伸缩空间
m_layout->addStretch();
// 设置滚动区域
scrollArea->setWidget(contentWidget);
mainLayout->addWidget(scrollArea);
}
protected:
private:
appConfig* _config;
hardwareInfoWidget _hardwareInfoWidget;
//std::vector<std::vector< aLineData>> privateJsondatas;//路径与数据
//std::vector<std::vector<QWidget*>> privateWidgets;//路径与数据
//std::vector<QGridLayout*>jsonLayouts;
};
#pragma once