From db0817695777c1f358c547e899cd88e9e8d5f065 Mon Sep 17 00:00:00 2001 From: likehomedream Date: Wed, 28 Jun 2023 17:44:21 +0800 Subject: [PATCH] add global UI --- src/baseUI/globalthemewidget.cpp | 143 +++++++++++++++++++++++++--- src/baseUI/globalthemewidget.h | 15 ++- src/baseUI/wallpaperthemewidget.cpp | 1 + 3 files changed, 144 insertions(+), 15 deletions(-) diff --git a/src/baseUI/globalthemewidget.cpp b/src/baseUI/globalthemewidget.cpp index 1eff3ee..1d8526f 100644 --- a/src/baseUI/globalthemewidget.cpp +++ b/src/baseUI/globalthemewidget.cpp @@ -2,7 +2,8 @@ #include #include #include - +#include +#include GlobalThemeWidget::GlobalThemeWidget(QWidget *parent) : WidgetBase(parent) { this->initThemeLabel("创建全局主题"); @@ -13,16 +14,18 @@ GlobalThemeWidget::GlobalThemeWidget(QWidget *parent) : WidgetBase(parent) void GlobalThemeWidget::init() { + QString name = qgetenv("USER"); + m_globalpath = HOMEPATH +name + "/.cache/theme-build/global/"; m_allLayout->takeAt(1); - initglobalwidget(); + initGlobalWidget(); int index = m_allLayout->indexOf(m_buttonWidget); m_allLayout->insertWidget(index, m_globalwidget); } -void GlobalThemeWidget::initglobalwidget() +void GlobalThemeWidget::initGlobalWidget() { m_globalwidget = new QWidget(this); m_globallayout = new QVBoxLayout(); @@ -39,20 +42,31 @@ void GlobalThemeWidget::initglobalwidget() label->setText("主题强调色:"); m_accentcolorlayout->addWidget(label); m_accentcolorlayout->addSpacing(10); - QMap colorButtonMap; + + QButtonGroup * box = new QButtonGroup; + box->setExclusive(true); m_colorlist = QStringList{"#3790fa", "#7873f5", "#eb3096", "#f3222d", "#f68c27", "#f9c53d", "#52c429"}; + m_numberList = QStringList{"daybreakBlue", "jamPurple", "magenta", "sunRed", "sunsetOrange", "dustGold", "polarGreen"}; - for (const QString& color : m_colorlist) { - QPushButton* pushButton = new QPushButton(); - pushButton->setProperty("isRoundButton", true); - - pushButton->setFixedSize(QSize(24,24)); - pal.setColor(QPalette::Button,QColor(color)); - pushButton->setPalette(pal); - colorButtonMap.insert(color, pushButton); - m_accentcolorlayout->addWidget(pushButton); + for (int i = 0; i < m_colorlist.size(); ++i) { + QPushButton *button = new QPushButton; + button->setFixedSize(QSize(24, 24)); + button->setStyleSheet(QString("background-color:%1").arg(m_colorlist.at(i))); + if (m_accentcolorlayout) { + m_accentcolorlayout->addWidget(button); + } + m_accentcolorlayout->addWidget(button); + box->addButton(button, i); } + + QObject::connect(box, QOverload::of(&QButtonGroup::buttonClicked), [&](int id) { + if (id >= 0 && id < m_numberList.size()) { + m_color = m_numberList.at(id); + qDebug() << m_color; + } + }); + m_accentcolorlayout->addStretch(1); m_coverwidget = new QWidget(m_globalwidget); @@ -81,6 +95,11 @@ void GlobalThemeWidget::initglobalwidget() buttonlayout->addWidget(iconLabel); buttonlayout->addWidget(textLabel); buttonlayout->addStretch(1); + + connect(m_coverbutton,&QPushButton::clicked,[=](){ + importCover(); + }); + m_coverlayout->addWidget(coverlabel); m_coverlayout->addWidget(m_coverbutton); m_coverlayout->addStretch(1); @@ -109,6 +128,9 @@ void GlobalThemeWidget::initglobalwidget() buttonlayout1->addWidget(iconLabel1); buttonlayout1->addWidget(textLabel1); buttonlayout1->addStretch(1); + connect(m_wallpaperbutton,&QPushButton::clicked,[=](){ + importWallpaper(); + }); m_wallpaperlayout->addWidget(wallpaperlabel); @@ -119,4 +141,99 @@ void GlobalThemeWidget::initglobalwidget() m_globallayout->addWidget(m_coverwidget); m_globallayout->addWidget(m_wallpaperwidget); m_globalwidget->setLayout(m_globallayout); + +} + +void GlobalThemeWidget::importCover() +{ + QString filters = tr("Cover files(*.png *.jpg)"); + m_fd= new QFileDialog(this); + m_fd->setFileMode(QFileDialog::Directory); + m_fd->setViewMode(QFileDialog::List); + m_fd->setNameFilter(filters); + m_fd->setFileMode(QFileDialog::ExistingFile); + m_fd->setDirectory(HOMEPATH+qgetenv("USER")); + m_fd->setWindowTitle(tr("Select Import Wallpapers")); + m_fd->setLabelText(QFileDialog::Accept, tr("Select")); + m_fd->setLabelText(QFileDialog::Reject, tr("Cancel")); + + connect(m_fd, &QFileDialog::fileSelected, this, [this](const QString &file){ + + QFileInfo fileInfo(file); + QPixmap pixmap(fileInfo.absoluteFilePath()); + + m_coverbutton->setIcon(pixmap); + m_coverbutton->setIconSize(m_coverbutton->size()); + + QLayout* layout = m_coverbutton->layout(); + if (layout != nullptr) { + QLayoutItem* item; + while ((item = layout->takeAt(0)) != nullptr) { + delete item->widget(); + delete item; + } + delete layout; + } + }); + + openFileDialog(); +} + +void GlobalThemeWidget::importWallpaper() +{ + QString filters = tr("Wallpaper files(*.png *.jpg)"); + m_fd= new QFileDialog(this); + m_fd->setFileMode(QFileDialog::Directory); + m_fd->setViewMode(QFileDialog::List); + m_fd->setNameFilter(filters); + m_fd->setFileMode(QFileDialog::ExistingFile); + m_fd->setDirectory(HOMEPATH+qgetenv("USER")); + m_fd->setWindowTitle(tr("Select Import Wallpapers")); + m_fd->setLabelText(QFileDialog::Accept, tr("Select")); + m_fd->setLabelText(QFileDialog::Reject, tr("Cancel")); + + connect(m_fd, &QFileDialog::fileSelected, this, [this](const QString &file){ + + QFileInfo fileInfo(file); + QPixmap pixmap(fileInfo.absoluteFilePath()); + + m_wallpaperbutton->setIcon(pixmap); + m_wallpaperbutton->setIconSize(m_wallpaperbutton->size()); + + QLayout* layout = m_wallpaperbutton->layout(); + if (layout != nullptr) { + QLayoutItem* item; + while ((item = layout->takeAt(0)) != nullptr) { + delete item->widget(); + delete item; + } + delete layout; + } + }); + + openFileDialog(); +} + +void GlobalThemeWidget::openFileDialog() +{ + if (m_fd->exec() != QDialog::Accepted) + return; + QString path = m_globalpath; + + QDir dir(path); + if (!dir.exists()) { + dir.mkpath(path); + } + QString sourceFilePath = m_fd->selectedFiles().first(); + + if (sourceFilePath.isEmpty()) + return; + + QFileInfo fileInfo(sourceFilePath); + QString destinationFolderPath = m_globalpath; // 替换为目标文件夹的路径 + + QString destinationFilePath = destinationFolderPath + "/" + fileInfo.fileName(); + + QFile::copy(sourceFilePath, destinationFilePath); + } diff --git a/src/baseUI/globalthemewidget.h b/src/baseUI/globalthemewidget.h index ae8ba6a..ac583d8 100644 --- a/src/baseUI/globalthemewidget.h +++ b/src/baseUI/globalthemewidget.h @@ -5,6 +5,7 @@ #include "widgetbase.h" #include #include +#include class GlobalThemeWidget : public WidgetBase { @@ -12,9 +13,14 @@ class GlobalThemeWidget : public WidgetBase public: explicit GlobalThemeWidget(QWidget *parent = nullptr); void init(); - void initglobalwidget(); + void initGlobalWidget(); + void importCover(); + void importWallpaper(); + void openFileDialog(); signals: private: + QString m_globalpath = ""; + QWidget *m_globalwidget; QVBoxLayout *m_globallayout; QWidget *m_accentcolorwidget; @@ -22,7 +28,8 @@ private: QMap m_colorbuttonmap; QMap m_colormap; QStringList m_colorlist; - + QString m_color = ""; + QStringList m_numberList; QWidget *m_coverwidget; QHBoxLayout *m_coverlayout; QPushButton *m_coverbutton; @@ -30,6 +37,10 @@ private: QWidget *m_wallpaperwidget; QHBoxLayout *m_wallpaperlayout; QPushButton *m_wallpaperbutton; + + QFileDialog *m_fd; + QString m_iconpath; + private slots: diff --git a/src/baseUI/wallpaperthemewidget.cpp b/src/baseUI/wallpaperthemewidget.cpp index 06a1d74..d217751 100644 --- a/src/baseUI/wallpaperthemewidget.cpp +++ b/src/baseUI/wallpaperthemewidget.cpp @@ -68,6 +68,7 @@ void WallpaperthemeWidget::importWallpaper() m_fd->setViewMode(QFileDialog::List); m_fd->setNameFilter(filters); m_fd->setFileMode(QFileDialog::ExistingFile); + m_fd->setDirectory(HOMEPATH+qgetenv("USER")); m_fd->setWindowTitle(tr("Select Import Wallpapers")); m_fd->setLabelText(QFileDialog::Accept, tr("Select")); m_fd->setLabelText(QFileDialog::Reject, tr("Cancel"));