| | |
| | | // 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" |
| | |
| | | #include <QtCore/QTime> |
| | | #include <QtCore/QTimer> |
| | | #include <QtGui/QPainter> |
| | | #include <QtGui/QWindow> |
| | | #include <QtWidgets/QApplication> |
| | | #include <QtWidgets/QStyle> |
| | | #include <QtWidgets/QPushButton> |
| | |
| | | #else |
| | | # include <QtWidgets/QActionGroup> |
| | | #endif |
| | | |
| | | // #include <QtWebEngineWidgets/QWebEngineView> |
| | | |
| | | #include <QWKWidgets/widgetwindowagent.h> |
| | | |
| | |
| | | MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { |
| | | 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); |
| | | |
| | | // setFixedHeight(600); |
| | | // windowAgent->centralize(); |
| | | } |
| | | |
| | | static inline void emulateLeaveEvent(QWidget *widget) { |
| | |
| | | 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; |
| | | } |
| | | |
| | |
| | | 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() { |
| | |
| | | |
| | | 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); |