diff --git a/control/home-page-item.cpp b/control/home-page-item.cpp index 5171a94..79258ed 100644 --- a/control/home-page-item.cpp +++ b/control/home-page-item.cpp @@ -55,6 +55,7 @@ void HomePageItem::setupUi(const int& type, const QString& path) { }); m_iconlabel = new QLabel(m_widget); m_namelabel = new QLabel(m_widget); + m_namelabel->setStyleSheet("QLabel{color: palette(text);}"); if (type == ItemType::Recent) { m_widget->setFixedSize(265, 48); QIcon icon; diff --git a/control/search-detail-view.cpp b/control/search-detail-view.cpp index d1361d3..d020820 100644 --- a/control/search-detail-view.cpp +++ b/control/search-detail-view.cpp @@ -65,7 +65,8 @@ void SearchDetailView::setupWidget(const int& type, const QString& path) { QLabel * nameLabel = new QLabel(nameFrame); QLabel * typeLabel = new QLabel(nameFrame); nameLabel->setStyleSheet("QLabel{font-size: 18px;}"); - typeLabel->setStyleSheet("QLabel{font-size: 14px; color: rgba(0, 0, 0, 0.43);}"); +// typeLabel->setStyleSheet("QLabel{font-size: 14px; color: rgba(0, 0, 0, 0.43);}"); + typeLabel->setStyleSheet("QLabel{font-size: 14px; color: palette(mid);}"); nameFrame->setFixedHeight(48); nameLabel->setMaximumWidth(240); nameLayout->addWidget(nameLabel); diff --git a/file-utils.cpp b/file-utils.cpp index 9635f6e..14fcee8 100644 --- a/file-utils.cpp +++ b/file-utils.cpp @@ -228,6 +228,8 @@ QStringList FileUtils::findMultiToneWords(const QString& hanzi) stitchMultiToneWordsDFS(hanzi, tempAllPinYin, tempFirst, output); // qDebug() << output; return output; +} + /** * @brief FileUtils::getDocxTextContent * @param path: abs path diff --git a/res/icons/close.svg b/res/icons/close.svg new file mode 100644 index 0000000..06a5a23 --- /dev/null +++ b/res/icons/close.svg @@ -0,0 +1 @@ +close \ No newline at end of file diff --git a/resource.qrc b/resource.qrc index 79bef96..aa72e10 100644 --- a/resource.qrc +++ b/resource.qrc @@ -9,5 +9,6 @@ res/search.xml index/pinyinWithTone.txt index/pinyinWithoutTone.txt + res/icons/close.svg diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index c199b80..d60a317 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -38,6 +38,7 @@ #include "inotify.h" #include "filetypefilter.h" #include "file-searcher.h" +#include "settings-widget.h" extern void qt_blurImage(QImage &blurImage, qreal radius, bool quality, int transposed); /** @@ -91,6 +92,10 @@ MainWindow::~MainWindow() delete m_searchLayout; m_searchLayout = NULL; } + if (m_settingsWidget) { + delete m_settingsWidget; + m_settingsWidget = NULL; + } } /** @@ -107,6 +112,7 @@ void MainWindow::initUi() QVBoxLayout * mainlayout = new QVBoxLayout(m_frame); mainlayout->setContentsMargins(16, 0, 16, 16); m_frame->setLayout(mainlayout); + m_frame->setStyleSheet("QLabel{color: palette(text);}"); m_titleFrame = new QFrame(m_frame);//标题栏 m_titleFrame->setFixedHeight(48); @@ -121,7 +127,20 @@ void MainWindow::initUi() m_menuBtn->setFixedSize(24, 24); m_menuBtn->setIcon(QIcon(":/res/icons/commonuse.svg")); m_menuBtn->setStyleSheet("QPushButton{background: transparent;}" - "QPushButton:hover{background: transparent;}"); + "QPushButton:hover:!pressed{background: transparent;}"); + connect(m_menuBtn, &QPushButton::clicked, this, [ = ]() { + if (m_settingsWidget) { //当此窗口已存在时,仅需置顶 + Qt::WindowFlags flags = m_settingsWidget->windowFlags(); + flags |= Qt::WindowStaysOnTopHint; + m_settingsWidget->setWindowFlags(flags); + flags &= ~Qt::WindowStaysOnTopHint; + m_settingsWidget->setWindowFlags(flags); + m_settingsWidget->show(); + return; + } + m_settingsWidget = new SettingsWidget(); + m_settingsWidget->show(); + }); m_titleLyt->addWidget(m_iconLabel); m_titleLyt->addWidget(m_titleLabel); m_titleLyt->addStretch(); diff --git a/src/mainwindow.h b/src/mainwindow.h index 36c3a42..34886ac 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -40,6 +40,7 @@ #include "content-widget.h" #include "input-box.h" #include "index/index-generator.h" +#include "settings-widget.h" class MainWindow : public QMainWindow { @@ -64,6 +65,7 @@ private: QLabel * m_iconLabel = nullptr; QLabel * m_titleLabel = nullptr; QPushButton * m_menuBtn = nullptr; + SettingsWidget * m_settingsWidget = nullptr; ContentWidget * m_contentFrame = nullptr;//内容栏 diff --git a/src/settings-widget.cpp b/src/settings-widget.cpp new file mode 100644 index 0000000..cc84918 --- /dev/null +++ b/src/settings-widget.cpp @@ -0,0 +1,237 @@ +#include "settings-widget.h" +#include +#include + +extern void qt_blurImage(QImage &blurImage, qreal radius, bool quality, int transposed); +SettingsWidget::SettingsWidget(QWidget *parent) : QWidget(parent) +{ + this->setWindowFlags(Qt::CustomizeWindowHint | Qt::FramelessWindowHint); + this->setAttribute(Qt::WA_TranslucentBackground); + initUi(); +} + +SettingsWidget::~SettingsWidget() +{ + +} + +/** + * @brief SettingsWidget::initUi 初始化界面UI + */ +void SettingsWidget::initUi() { + this->setFixedWidth(528); + this->setMinimumHeight(460); + this->setMaximumHeight(680); + m_mainLyt = new QVBoxLayout(this); + m_mainLyt->setContentsMargins(24, 9, 24, 24); + this->setLayout(m_mainLyt); + this->setStyleSheet("QLabel{color: palette(text);}"); + + //标题栏 + m_titleFrame = new QFrame(this); + m_titleFrame->setFixedHeight(40); + m_titleLyt = new QHBoxLayout(m_titleFrame); + m_titleLyt->setContentsMargins(0, 0, 0, 0); + m_titleFrame->setLayout(m_titleLyt); + m_titleIcon = new QLabel(m_titleFrame); + m_titleIcon->setPixmap(QPixmap(":/res/icons/edit-find-symbolic.svg")); + m_titleLabel = new QLabel(m_titleFrame); + m_titleLabel->setText(tr("Search")); + m_closeBtn = new QPushButton(m_titleFrame); + m_closeBtn->setFixedSize(24, 24); + m_closeBtn->setIcon(QIcon(":/res/icons/close.svg")); + m_closeBtn->setStyleSheet("QPushButton{background: transparent;}" + "QPushButton:hover:!pressed{background: transparent;}"); + connect(m_closeBtn, &QPushButton::clicked, this, [ = ]() { + this->close(); + }); + m_titleLyt->addWidget(m_titleIcon); + m_titleLyt->addWidget(m_titleLabel); + m_titleLyt->addStretch(); + m_titleLyt->addWidget(m_closeBtn); + m_mainLyt->addWidget(m_titleFrame); + + //设置 + m_settingLabel = new QLabel(this); + m_settingLabel->setText(tr("Settings")); + m_settingLabel->setStyleSheet("QLabel{font-size: 24px; color: palette(text);}"); + m_mainLyt->addWidget(m_settingLabel); + + //文件索引 + m_indexTitleLabel = new QLabel(this); + m_indexTitleLabel->setText(tr("Index State")); + m_indexTitleLabel->setStyleSheet("QLabel{font-size: 16px; font-weight:bold; color: palette(text);}"); + m_indexStateLabel = new QLabel(this); + m_indexStateLabel->setText(tr("...")); + m_indexNumLabel = new QLabel(this); + m_indexNumLabel->setText(tr("...")); + m_mainLyt->addWidget(m_indexTitleLabel); + m_mainLyt->addWidget(m_indexStateLabel); + m_mainLyt->addWidget(m_indexNumLabel); + + //文件索引设置(黑名单) + m_indexSettingLabel = new QLabel(this); + m_indexSettingLabel->setText(tr("File Index Settings")); + m_indexSettingLabel->setStyleSheet("QLabel{font-size: 16px; font-weight:bold; color: palette(text);}"); + m_indexDescLabel = new QLabel(this); + m_indexDescLabel->setText(tr("Following folders will not be searched. You can set it by adding and removing folders.")); + m_indexDescLabel->setWordWrap(true); + m_indexBtnFrame = new QFrame(this); + m_indexBtnLyt = new QHBoxLayout(m_indexBtnFrame); + m_indexBtnLyt->setContentsMargins(0, 0, 0, 0); + m_indexBtnFrame->setLayout(m_indexBtnLyt); + m_addDirBtn = new QPushButton(m_indexBtnFrame); + m_addDirBtn->setFixedHeight(32); + m_addDirBtn->setMinimumWidth(164); + m_addDirBtn->setText(tr("Add ignored folders")); + connect(m_addDirBtn, &QPushButton::clicked, this, &SettingsWidget::onBtnAddClicked); + m_indexBtnLyt->addWidget(m_addDirBtn); + m_indexBtnLyt->addStretch(); + m_dirListArea = new QScrollArea(this); + m_mainLyt->addWidget(m_indexSettingLabel); + m_mainLyt->addWidget(m_indexDescLabel); + m_mainLyt->addWidget(m_indexBtnFrame); + m_mainLyt->addWidget(m_dirListArea); + + //搜索引擎设置 + m_searchEngineLabel = new QLabel(this); + m_searchEngineLabel->setText(tr("Search Engine Settings")); + m_searchEngineLabel->setStyleSheet("QLabel{font-size: 16px; font-weight:bold; color: palette(text);}"); + m_engineDescLabel = new QLabel(this); + m_engineDescLabel->setText(tr("Please select search engine you preferred.")); + m_engineDescLabel->setWordWrap(true); + m_engineBtnGroup = new QButtonGroup(this); + m_baiduBtn = new QRadioButton(this); + m_sougouBtn = new QRadioButton(this); + m_360Btn = new QRadioButton(this); + m_baiduBtn->setFixedSize(16, 16); + m_sougouBtn->setFixedSize(16, 16); + m_360Btn->setFixedSize(16, 16); + m_radioBtnFrame = new QFrame(this); + m_radioBtnLyt = new QHBoxLayout(m_radioBtnFrame); + m_radioBtnFrame->setLayout(m_radioBtnLyt); + m_baiduLabel = new QLabel(); + m_baiduLabel->setText(tr("baidu")); + m_sougouLabel = new QLabel(); + m_sougouLabel->setText(tr("sougou")); + m_360Label = new QLabel(); + m_360Label->setText(tr("360")); + m_radioBtnLyt->setContentsMargins(0, 0, 0, 0); + m_radioBtnLyt->addWidget(m_baiduBtn); + m_radioBtnLyt->addWidget(m_baiduLabel); + m_radioBtnLyt->addWidget(m_sougouBtn); + m_radioBtnLyt->addWidget(m_sougouLabel); + m_radioBtnLyt->addWidget(m_360Btn); + m_radioBtnLyt->addWidget(m_360Label); + m_radioBtnLyt->addStretch(); + m_engineBtnGroup->setExclusive(true); + m_engineBtnGroup->addButton(m_baiduBtn); + m_engineBtnGroup->addButton(m_sougouBtn); + m_engineBtnGroup->addButton(m_360Btn); + m_mainLyt->addWidget(m_searchEngineLabel); + m_mainLyt->addWidget(m_engineDescLabel); + m_mainLyt->addWidget(m_radioBtnFrame); + + //取消与确认按钮 + m_bottomBtnFrame = new QFrame(this); + m_bottomBtnLyt = new QHBoxLayout(m_bottomBtnFrame); + m_bottomBtnFrame->setLayout(m_bottomBtnLyt); + m_bottomBtnLyt->setSpacing(20); + m_cancelBtn = new QPushButton(m_bottomBtnFrame); + m_cancelBtn->setText(tr("Cancel")); + m_cancelBtn->setFixedSize(80, 32); + connect(m_cancelBtn, &QPushButton::clicked, this, &SettingsWidget::onBtnCancelClicked); + m_confirmBtn = new QPushButton(m_bottomBtnFrame); + m_confirmBtn->setText(tr("Confirm")); + m_confirmBtn->setFixedSize(80, 32); + connect(m_confirmBtn, &QPushButton::clicked, this, &SettingsWidget::onBtnConfirmClicked); + m_bottomBtnLyt->addStretch(); + m_bottomBtnLyt->addWidget(m_cancelBtn); + m_bottomBtnLyt->addWidget(m_confirmBtn); + m_mainLyt->addWidget(m_bottomBtnFrame); + + m_mainLyt->addStretch(); +} + +/** + * @brief setIndexState 设置当前索引状态 + * @param isCreatingIndex 是否正在创建索引 + */ +void SettingsWidget::setIndexState(bool isCreatingIndex) { + if (isCreatingIndex) { + m_indexStateLabel->setText(tr("Creating ...")); + return; + } + m_indexStateLabel->setText(tr("Done")); +} + +/** + * @brief SettingsWidget::setIndexNum 设置当前索引项数量 + * @param num 索引项数量 + */ +void SettingsWidget::setIndexNum(int num) { + m_indexNumLabel->setText(QString(tr("Index Entry: %1")).arg(QString::number(num))); +} + +/** + * @brief SettingsWidget::onBtnConfirmClicked 点击确认按钮的槽函数 + */ +void SettingsWidget::onBtnConfirmClicked() { + +} + +/** + * @brief SettingsWidget::onBtnCancelClicked 点击取消按钮的槽函数 + */ +void SettingsWidget::onBtnCancelClicked() { + this->close(); +} + +/** + * @brief SettingsWidget::onBtnAddClicked 点击添加黑名单按钮的槽函数 + */ +void SettingsWidget::onBtnAddClicked() { + +} + +void SettingsWidget::paintEvent(QPaintEvent *event) { + Q_UNUSED(event) + + QPainter p(this); + p.setRenderHint(QPainter::Antialiasing); + QPainterPath rectPath; + rectPath.addRoundedRect(this->rect().adjusted(10, 10, -10, -10), 6, 6); + + // 画一个黑底 + QPixmap pixmap(this->rect().size()); + pixmap.fill(Qt::transparent); + QPainter pixmapPainter(&pixmap); + pixmapPainter.setRenderHint(QPainter::Antialiasing); + pixmapPainter.setPen(Qt::transparent); + pixmapPainter.setBrush(Qt::black); + pixmapPainter.setOpacity(0.65); + pixmapPainter.drawPath(rectPath); + pixmapPainter.end(); + + // 模糊这个黑底 + QImage img = pixmap.toImage(); + qt_blurImage(img, 10, false, false); + + // 挖掉中心 + pixmap = QPixmap::fromImage(img); + QPainter pixmapPainter2(&pixmap); + pixmapPainter2.setRenderHint(QPainter::Antialiasing); + pixmapPainter2.setCompositionMode(QPainter::CompositionMode_Clear); + pixmapPainter2.setPen(Qt::transparent); + pixmapPainter2.setBrush(Qt::transparent); + pixmapPainter2.drawPath(rectPath); + + // 绘制阴影 + p.drawPixmap(this->rect(), pixmap, pixmap.rect()); + + // 绘制一个背景 + p.save(); + p.fillPath(rectPath,palette().color(QPalette::Base)); + p.restore(); + +} diff --git a/src/settings-widget.h b/src/settings-widget.h new file mode 100644 index 0000000..e2eeb54 --- /dev/null +++ b/src/settings-widget.h @@ -0,0 +1,75 @@ +#ifndef SETTINGSWIDGET_H +#define SETTINGSWIDGET_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class SettingsWidget : public QWidget +{ + Q_OBJECT +public: + explicit SettingsWidget(QWidget *parent = nullptr); + ~SettingsWidget(); + + void setIndexState(bool); + void setIndexNum(int); + +private: + void initUi(); + void paintEvent(QPaintEvent *event); + //标题栏 + QVBoxLayout * m_mainLyt = nullptr; + QFrame * m_titleFrame = nullptr; + QHBoxLayout * m_titleLyt = nullptr; + QLabel * m_titleIcon = nullptr; + QLabel * m_titleLabel = nullptr; + QPushButton * m_closeBtn = nullptr; + + //设置 + QLabel * m_settingLabel = nullptr; + //文件索引 + QLabel * m_indexTitleLabel = nullptr; + QLabel * m_indexStateLabel = nullptr; + QLabel * m_indexNumLabel = nullptr; + //文件索引设置(黑名单) + QLabel * m_indexSettingLabel = nullptr; + QLabel * m_indexDescLabel = nullptr; + QFrame * m_indexBtnFrame = nullptr; + QHBoxLayout * m_indexBtnLyt = nullptr; + QPushButton * m_addDirBtn = nullptr; + QScrollArea * m_dirListArea = nullptr; + + //搜索引擎设置 + QLabel * m_searchEngineLabel = nullptr; + QLabel * m_engineDescLabel = nullptr; + QButtonGroup * m_engineBtnGroup = nullptr; + QFrame * m_radioBtnFrame = nullptr; + QHBoxLayout * m_radioBtnLyt = nullptr; + QRadioButton * m_baiduBtn = nullptr; + QLabel * m_baiduLabel = nullptr; + QRadioButton * m_sougouBtn = nullptr; + QLabel * m_sougouLabel = nullptr; + QRadioButton * m_360Btn = nullptr; + QLabel * m_360Label = nullptr; + + //取消与确认按钮 + QFrame * m_bottomBtnFrame = nullptr; + QHBoxLayout * m_bottomBtnLyt = nullptr; + QPushButton * m_cancelBtn = nullptr; + QPushButton * m_confirmBtn = nullptr; +Q_SIGNALS: + +private Q_SLOTS: + void onBtnConfirmClicked(); + void onBtnCancelClicked(); + void onBtnAddClicked(); +}; + +#endif // SETTINGSWIDGET_H diff --git a/src/src.pri b/src/src.pri index 7b3708c..022e0aa 100644 --- a/src/src.pri +++ b/src/src.pri @@ -4,9 +4,11 @@ HEADERS += \ $$PWD/mainwindow.h \ $$PWD/content-widget.h \ $$PWD/input-box.h \ + $$PWD/settings-widget.h \ SOURCES += \ $$PWD/main.cpp \ $$PWD/mainwindow.cpp \ $$PWD/content-widget.cpp \ $$PWD/input-box.cpp \ + $$PWD/settings-widget.cpp \