From f645ae48cda10b80ffe9d83ba9487671c7f535c0 Mon Sep 17 00:00:00 2001 From: Zhao Yuhang <2546789017@qq.com> Date: 周日, 15 9月 2024 13:26:04 +0800 Subject: [PATCH] update demo code --- examples/mainwindow/mainwindow.cpp | 75 +++++++++++++++++++------------------ 1 files changed, 39 insertions(+), 36 deletions(-) diff --git a/examples/mainwindow/mainwindow.cpp b/examples/mainwindow/mainwindow.cpp index bf2c4b0..7492b43 100644 --- a/examples/mainwindow/mainwindow.cpp +++ b/examples/mainwindow/mainwindow.cpp @@ -37,11 +37,14 @@ protected: void timerEvent(QTimerEvent *event) override { + QLabel::timerEvent(event); setText(QTime::currentTime().toString(QStringLiteral("hh:mm:ss"))); } }; MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { + setAttribute(Qt::WA_DontCreateNativeAncestors); + installWindowAgent(); #if 1 @@ -128,14 +131,6 @@ return QMainWindow::event(event); } - -void MainWindow::closeEvent(QCloseEvent *event) { - // if (!(qApp->keyboardModifiers() & Qt::ControlModifier)) { - // QTimer::singleShot(1000, this, &QWidget::show); - // } - event->accept(); -} - void MainWindow::installWindowAgent() { // 1. Setup window agent windowAgent = new QWK::WidgetWindowAgent(this); @@ -143,7 +138,7 @@ // 2. Construct your title bar auto menuBar = [this]() { - auto menuBar = new QMenuBar(); + auto menuBar = new QMenuBar(this); // Virtual menu auto file = new QMenu(tr("File(&F)"), menuBar); @@ -166,45 +161,52 @@ }); #ifdef Q_OS_WIN + auto noneAction = new QAction(tr("None"), menuBar); + noneAction->setData(QStringLiteral("none")); + noneAction->setCheckable(true); + noneAction->setChecked(true); + auto dwmBlurAction = new QAction(tr("Enable DWM blur"), menuBar); + dwmBlurAction->setData(QStringLiteral("dwm-blur")); dwmBlurAction->setCheckable(true); - connect(dwmBlurAction, &QAction::toggled, this, [this](bool checked) { - if (!windowAgent->setWindowAttribute(QStringLiteral("dwm-blur"), checked)) { - return; - } - setProperty("custom-style", checked); - style()->polish(this); - }); auto acrylicAction = new QAction(tr("Enable acrylic material"), menuBar); + acrylicAction->setData(QStringLiteral("acrylic-material")); acrylicAction->setCheckable(true); - connect(acrylicAction, &QAction::toggled, this, [this](bool checked) { - if (!windowAgent->setWindowAttribute(QStringLiteral("acrylic-material"), true)) { - return; - } - setProperty("custom-style", checked); - style()->polish(this); - }); auto micaAction = new QAction(tr("Enable mica"), menuBar); + micaAction->setData(QStringLiteral("mica")); micaAction->setCheckable(true); - connect(micaAction, &QAction::toggled, this, [this](bool checked) { - if (!windowAgent->setWindowAttribute(QStringLiteral("mica"), checked)) { - return; + + auto micaAltAction = new QAction(tr("Enable mica alt"), menuBar); + micaAltAction->setData(QStringLiteral("mica-alt")); + micaAltAction->setCheckable(true); + + auto winStyleGroup = new QActionGroup(menuBar); + winStyleGroup->addAction(noneAction); + winStyleGroup->addAction(dwmBlurAction); + winStyleGroup->addAction(acrylicAction); + winStyleGroup->addAction(micaAction); + winStyleGroup->addAction(micaAltAction); + connect(winStyleGroup, &QActionGroup::triggered, this, [this, winStyleGroup](QAction *action) { + // Unset all custom style attributes first, otherwise the style will not display correctly + for (const QAction* _act : winStyleGroup->actions()) { + const QString data = _act->data().toString(); + if (data.isEmpty() || data == QStringLiteral("none")) { + continue; + } + windowAgent->setWindowAttribute(data, false); } - setProperty("custom-style", checked); + const QString data = action->data().toString(); + if (data == QStringLiteral("none")) { + setProperty("custom-style", false); + } else if (!data.isEmpty()) { + windowAgent->setWindowAttribute(data, true); + setProperty("custom-style", true); + } style()->polish(this); }); - auto micaAltAction = new QAction(tr("Enable mica alt"), menuBar); - micaAltAction->setCheckable(true); - connect(micaAltAction, &QAction::toggled, this, [this](bool checked) { - if (!windowAgent->setWindowAttribute(QStringLiteral("mica-alt"), checked)) { - return; - } - setProperty("custom-style", checked); - style()->polish(this); - }); #elif defined(Q_OS_MAC) auto darkBlurAction = new QAction(tr("Dark blur"), menuBar); darkBlurAction->setCheckable(true); @@ -254,6 +256,7 @@ #ifdef Q_OS_WIN settings->addSeparator(); + settings->addAction(noneAction); settings->addAction(dwmBlurAction); settings->addAction(acrylicAction); settings->addAction(micaAction); -- Gitblit v1.9.1