Sine Striker
2024-05-15 00b91a374872280a4a5addc22f08c7954a6637aa
examples/mainwindow/mainwindow.cpp
@@ -1,4 +1,5 @@
// Copyright (C) 2023-2024 Stdware Collections
// Copyright (C) 2023-2024 Stdware Collections (https://www.github.com/stdware)
// Copyright (C) 2021-2023 wangwenx190 (Yuhang Zhao)
// SPDX-License-Identifier: Apache-2.0
#include "mainwindow.h"
@@ -8,6 +9,7 @@
#include <QtCore/QTime>
#include <QtCore/QTimer>
#include <QtGui/QPainter>
#include <QtGui/QWindow>
#include <QtWidgets/QApplication>
#include <QtWidgets/QStyle>
#include <QtWidgets/QPushButton>
@@ -16,6 +18,8 @@
#else
#  include <QtWidgets/QActionGroup>
#endif
// #include <QtWebEngineWidgets/QWebEngineView>
#include <QWKWidgets/widgetwindowagent.h>
@@ -38,17 +42,25 @@
};
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) {
    installWindowAgent();
     installWindowAgent();
#if 1
    auto clockWidget = new ClockWidget();
    clockWidget->setObjectName(QStringLiteral("clock-widget"));
    clockWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    setCentralWidget(clockWidget);
#else
    auto webView = new QWebEngineView();
    webView->load(QUrl("https://www.baidu.com"));
    setCentralWidget(webView);
#endif
    loadStyleSheet(Dark);
    setWindowTitle(tr("Example MainWindow"));
    resize(800, 600);
    // windowAgent->centralize();
}
static inline void emulateLeaveEvent(QWidget *widget) {
@@ -109,6 +121,14 @@
            break;
    }
    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() {
@@ -283,14 +303,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) {
@@ -301,24 +321,6 @@
    setMenuWidget(windowBar);
    // 3. Adds simulated mouse events to the title bar buttons
#ifdef Q_OS_WINDOWS
    // Emulate Window system menu button behaviors
    connect(iconButton, &QAbstractButton::clicked, windowAgent, [this, iconButton] {
        iconButton->setProperty("double-click-close", false);
        // Pick a suitable time threshold
        QTimer::singleShot(75, windowAgent, [this, iconButton]() {
            if (iconButton->property("double-click-close").toBool())
                return;
            windowAgent->showSystemMenu(iconButton->mapToGlobal(QPoint{0, iconButton->height()}));
        });
    });
    connect(iconButton, &QWK::WindowButton::doubleClicked, this, [iconButton, this]() {
        iconButton->setProperty("double-click-close", true);
        close();
    });
#endif
#ifndef Q_OS_MAC
    connect(windowBar, &QWK::WindowBar::minimizeRequested, this, &QWidget::showMinimized);