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 | 102 +++++++++++++++++++++++++++----------------------- 1 files changed, 55 insertions(+), 47 deletions(-) diff --git a/examples/mainwindow/mainwindow.cpp b/examples/mainwindow/mainwindow.cpp index c704812..7492b43 100644 --- a/examples/mainwindow/mainwindow.cpp +++ b/examples/mainwindow/mainwindow.cpp @@ -37,12 +37,15 @@ protected: void timerEvent(QTimerEvent *event) override { + QLabel::timerEvent(event); setText(QTime::currentTime().toString(QStringLiteral("hh:mm:ss"))); } }; MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { - installWindowAgent(); + setAttribute(Qt::WA_DontCreateNativeAncestors); + + installWindowAgent(); #if 1 auto clockWidget = new ClockWidget(); @@ -60,6 +63,7 @@ setWindowTitle(tr("Example MainWindow")); resize(800, 600); + // setFixedHeight(600); // windowAgent->centralize(); } @@ -105,15 +109,19 @@ switch (event->type()) { case QEvent::WindowActivate: { auto menu = menuWidget(); - menu->setProperty("bar-active", true); - style()->polish(menu); + if (menu) { + menu->setProperty("bar-active", true); + style()->polish(menu); + } break; } case QEvent::WindowDeactivate: { auto menu = menuWidget(); - menu->setProperty("bar-active", false); - style()->polish(menu); + if (menu) { + menu->setProperty("bar-active", false); + style()->polish(menu); + } break; } @@ -123,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); @@ -138,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); @@ -161,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); @@ -249,6 +256,7 @@ #ifdef Q_OS_WIN settings->addSeparator(); + settings->addAction(noneAction); settings->addAction(dwmBlurAction); settings->addAction(acrylicAction); settings->addAction(micaAction); @@ -303,14 +311,14 @@ windowBar->setTitleLabel(titleLabel); windowBar->setHostWidget(this); - windowAgent->setTitleBar(windowBar); + windowAgent->setTitleBar(windowBar); #ifndef Q_OS_MAC - windowAgent->setSystemButton(QWK::WindowAgentBase::WindowIcon, iconButton); - windowAgent->setSystemButton(QWK::WindowAgentBase::Minimize, minButton); - windowAgent->setSystemButton(QWK::WindowAgentBase::Maximize, maxButton); - windowAgent->setSystemButton(QWK::WindowAgentBase::Close, closeButton); + windowAgent->setSystemButton(QWK::WindowAgentBase::WindowIcon, iconButton); + windowAgent->setSystemButton(QWK::WindowAgentBase::Minimize, minButton); + windowAgent->setSystemButton(QWK::WindowAgentBase::Maximize, maxButton); + windowAgent->setSystemButton(QWK::WindowAgentBase::Close, closeButton); #endif - windowAgent->setHitTestVisible(menuBar, true); + windowAgent->setHitTestVisible(menuBar, true); #ifdef Q_OS_MAC windowAgent->setSystemButtonAreaCallback([](const QSize &size) { -- Gitblit v1.9.1