fix: 注销外部库

chen
cbwu 4 weeks ago
parent 55425bc8df
commit cc6280e0db

@ -10,8 +10,8 @@ set(CMAKE_AUTOUIC ON)
# set(CMAKE_INCLUDE_CURRENT_DIR ON) # set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTORCC ON) set(CMAKE_AUTORCC ON)
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake;${CMAKE_MODULE_PATH}") # set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake;${CMAKE_MODULE_PATH}")
include(QWindowKit) # include(QWindowKit)
find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets OpenGLWidgets Network SerialPort) find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets OpenGLWidgets Network SerialPort)

@ -17,14 +17,13 @@ qt6_add_resources(VideoClient "resources"
) )
set(3RDPARTY_DIR ${CMAKE_CURRENT_LIST_DIR}/3rdparty) set(3RDPARTY_DIR ${CMAKE_CURRENT_LIST_DIR}/3rdparty)
set(FFMPEG_DIR ${3RDPARTY_DIR}/ffmpeg) set(FFMPEG_DIR ${3RDPARTY_DIR}/ffmpeg)
# add_subdirectory(shared)
add_subdirectory(video) add_subdirectory(video)
add_subdirectory(3rdparty) add_subdirectory(3rdparty)
add_subdirectory(shared)
target_link_libraries(VideoClient target_link_libraries(VideoClient
PRIVATE PRIVATE
@ -35,8 +34,8 @@ target_link_libraries(VideoClient
Qt6::Network Qt6::Network
Qt6::SerialPort Qt6::SerialPort
video video
QWindowKit::Widgets # QWindowKit::Widgets
WidgetFrame # WidgetFrame
) )
# #
target_include_directories(VideoClient PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include/) target_include_directories(VideoClient PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include/)

@ -1,24 +1,30 @@
#include "mainwindow.h" #include "mainwindow.h"
#include <QWKWidgets/qwkwidgetsglobal.h> // #include <QWKWidgets/qwkwidgetsglobal.h>
#include <QWKWidgets/widgetwindowagent.h> // #include <QWKWidgets/widgetwindowagent.h>
#include <QList> #include <QList>
#include <QtGui/QPainter>
#include "ui_mainwindow.h" #include "ui_mainwindow.h"
#include "widgetframe/windowbar.h" // #include "widgetframe/windowbar.h"
#include "widgetframe/windowbutton.h" // #include "widgetframe/windowbutton.h"
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
#include <QtGui/QActionGroup>
#else
#include <QtWidgets/QActionGroup>
#endif
MainWindow::MainWindow(QWidget *parent) MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent), ui(new Ui::MainWindow) { : QMainWindow(parent), ui(new Ui::MainWindow) {
ui->setupUi(this); ui->setupUi(this);
this->setWindowTitle("载荷视频播放软件"); this->setWindowTitle("载荷视频播放软件");
// windowAgent = new QWK::WidgetWindowAgent(this);
// windowAgent->setup(this);
// auto windowBar = new QWK::WindowBar();
// auto iconButton = new QWK::WindowButton();
/* /*
auto windowAgent = new QWK::WidgetWindowAgent(this);
windowAgent->setup(this);
auto windowBar = new QWK::WindowBar();
auto iconButton = new QWK::WindowButton();
iconButton->setObjectName(QStringLiteral("icon-button")); iconButton->setObjectName(QStringLiteral("icon-button"));
iconButton->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); iconButton->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
@ -43,8 +49,9 @@ MainWindow::MainWindow(QWidget* parent)
windowBar->setMaxButton(maxButton); windowBar->setMaxButton(maxButton);
windowBar->setCloseButton(closeButton); windowBar->setCloseButton(closeButton);
windowAgent->setTitleBar(windowBar); windowAgent->setTitleBar(windowBar);
setMenuWidget(windowBar);
// windowAgent->setHitTestVisible(windowBar->menuBar(), true);
*/ */
// apply the qss // apply the qss
QFile qssfile(":/Qss/qss.qss"); QFile qssfile(":/Qss/qss.qss");
if (qssfile.open(QFile::ReadOnly)) { if (qssfile.open(QFile::ReadOnly)) {
@ -115,3 +122,198 @@ void MainWindow::showMessageSlots(QString message, int type) {
m_notifyManager->notify(message, "", type, 3000); m_notifyManager->notify(message, "", type, 3000);
} }
} }
/*
void MainWindow::installWindowAgent() {
// 1. Setup window agent
windowAgent = new QWK::WidgetWindowAgent(this);
windowAgent->setup(this);
// 2. Construct your title bar
auto menuBar = [this]() {
auto menuBar = new QMenuBar(this);
// Virtual menu
auto file = new QMenu(tr("File(&F)"), menuBar);
file->addAction(new QAction(tr("New(&N)"), menuBar));
file->addAction(new QAction(tr("Open(&O)"), menuBar));
file->addSeparator();
auto edit = new QMenu(tr("Edit(&E)"), menuBar);
edit->addAction(new QAction(tr("Undo(&U)"), menuBar));
edit->addAction(new QAction(tr("Redo(&R)"), menuBar));
// Theme action
auto darkAction = new QAction(tr("Enable dark theme"), menuBar);
darkAction->setCheckable(true);
// connect(darkAction, &QAction::triggered, this, [this](bool checked) {
// loadStyleSheet(checked ? Dark : Light); //
// });
// connect(this, &MainWindow::themeChanged, darkAction,
// [this, darkAction]() {
// darkAction->setChecked(currentTheme == Dark); //
// });
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);
auto acrylicAction =
new QAction(tr("Enable acrylic material"), menuBar);
acrylicAction->setData(QStringLiteral("acrylic-material"));
acrylicAction->setCheckable(true);
auto micaAction = new QAction(tr("Enable mica"), menuBar);
micaAction->setData(QStringLiteral("mica"));
micaAction->setCheckable(true);
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);
// }
// 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);
// });
// Real menu
auto settings = new QMenu(tr("Settings(&S)"), menuBar);
settings->addAction(darkAction);
settings->addSeparator();
settings->addAction(noneAction);
settings->addAction(dwmBlurAction);
settings->addAction(acrylicAction);
settings->addAction(micaAction);
settings->addAction(micaAltAction);
menuBar->addMenu(file);
menuBar->addMenu(edit);
menuBar->addMenu(settings);
return menuBar;
}();
menuBar->setObjectName(QStringLiteral("win-menu-bar"));
auto titleLabel = new QLabel();
titleLabel->setAlignment(Qt::AlignCenter);
titleLabel->setObjectName(QStringLiteral("win-title-label"));
#ifndef Q_OS_MAC
auto iconButton = new QWK::WindowButton();
iconButton->setObjectName(QStringLiteral("icon-button"));
iconButton->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
auto pinButton = new QWK::WindowButton();
pinButton->setCheckable(true);
pinButton->setObjectName(QStringLiteral("pin-button"));
pinButton->setProperty("system-button", true);
pinButton->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
auto minButton = new QWK::WindowButton();
minButton->setObjectName(QStringLiteral("min-button"));
minButton->setProperty("system-button", true);
minButton->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
auto maxButton = new QWK::WindowButton();
maxButton->setCheckable(true);
maxButton->setObjectName(QStringLiteral("max-button"));
maxButton->setProperty("system-button", true);
maxButton->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
auto closeButton = new QWK::WindowButton();
closeButton->setObjectName(QStringLiteral("close-button"));
closeButton->setProperty("system-button", true);
closeButton->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
#endif
auto windowBar = new QWK::WindowBar();
#ifndef Q_OS_MAC
windowBar->setIconButton(iconButton);
windowBar->setPinButton(pinButton);
windowBar->setMinButton(minButton);
windowBar->setMaxButton(maxButton);
windowBar->setCloseButton(closeButton);
#endif
windowBar->setMenuBar(menuBar);
windowBar->setTitleLabel(titleLabel);
windowBar->setHostWidget(this);
windowAgent->setTitleBar(windowBar);
#ifndef Q_OS_MAC
windowAgent->setHitTestVisible(pinButton, true);
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);
#ifdef Q_OS_MAC
windowAgent->setSystemButtonAreaCallback([](const QSize &size) {
static constexpr const int width = 75;
return QRect(QPoint(size.width() - width, 0),
QSize(width, size.height())); //
});
#endif
setMenuWidget(windowBar);
#ifndef Q_OS_MAC
connect(windowBar, &QWK::WindowBar::pinRequested, this,
[this, pinButton](bool pin) {
if (isHidden() || isMinimized() || isMaximized() ||
isFullScreen()) {
return;
}
setWindowFlag(Qt::WindowStaysOnTopHint, pin);
show();
pinButton->setChecked(pin);
});
connect(windowBar, &QWK::WindowBar::minimizeRequested, this,
&QWidget::showMinimized);
connect(windowBar, &QWK::WindowBar::maximizeRequested, this,
[this, maxButton](bool max) {
if (max) {
showMaximized();
} else {
showNormal();
}
// It's a Qt issue that if a QAbstractButton::clicked triggers a
// window's maximization, the button remains to be hovered until
// the mouse move. As a result, we need to manually send leave
// events to the button.
// emulateLeaveEvent(maxButton);
});
connect(windowBar, &QWK::WindowBar::closeRequested, this, &QWidget::close);
#endif
}
*/

@ -8,6 +8,11 @@
#include "commandwidget.h" #include "commandwidget.h"
#include "global.h" #include "global.h"
namespace QWK {
class WidgetWindowAgent;
class StyleAgent;
} // namespace QWK
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
namespace Ui { namespace Ui {
class MainWindow; class MainWindow;
@ -28,8 +33,11 @@ private:
void showMessageSlots(QString message, int type); void showMessageSlots(QString message, int type);
// void installWindowAgent();
private: private:
Ui::MainWindow *ui; Ui::MainWindow *ui;
// QWK::WidgetWindowAgent *windowAgent;
NotifyManager *m_notifyManager = nullptr; NotifyManager *m_notifyManager = nullptr;
}; };
#endif // MAINWINDOW_H #endif // MAINWINDOW_H

Before

Width:  |  Height:  |  Size: 52 KiB

After

Width:  |  Height:  |  Size: 52 KiB

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

Before

Width:  |  Height:  |  Size: 444 B

After

Width:  |  Height:  |  Size: 444 B

@ -6,13 +6,14 @@ set(CMAKE_AUTORCC ON)
file(GLOB _src *.h *.cpp) file(GLOB _src *.h *.cpp)
add_library(${PROJECT_NAME} STATIC "") qt_add_library(${PROJECT_NAME} STATIC "")
target_sources(${PROJECT_NAME} target_sources(${PROJECT_NAME}
PRIVATE PRIVATE
windowbar.cpp windowbar.cpp
windowbutton.cpp windowbutton.cpp
PUBLIC PUBLIC
windowbar.h
windowbar_p.h windowbar_p.h
windowbutton.h windowbutton.h
windowbutton_p.h windowbutton_p.h
@ -20,7 +21,7 @@ PUBLIC
qt6_add_resources(${PROJECT_NAME} "resources" qt6_add_resources(${PROJECT_NAME} "resources"
PREFIX "/" PREFIX "/"
FILES "resources/shared.qrc" FILES "../resources/shared.qrc"
) )
target_link_libraries(${PROJECT_NAME} PRIVATE target_link_libraries(${PROJECT_NAME} PRIVATE

@ -79,14 +79,19 @@ namespace QWK {
return static_cast<QAbstractButton *>(d->widgetAt(WindowBarPrivate::IconButton)); return static_cast<QAbstractButton *>(d->widgetAt(WindowBarPrivate::IconButton));
} }
QAbstractButton *WindowBar::pinButton() const {
Q_D(const WindowBar);
return static_cast<QAbstractButton *>(d->widgetAt(WindowBarPrivate::PinButton));
}
QAbstractButton *WindowBar::minButton() const { QAbstractButton *WindowBar::minButton() const {
Q_D(const WindowBar); Q_D(const WindowBar);
return static_cast<QAbstractButton *>(d->widgetAt(WindowBarPrivate::MinimumButton)); return static_cast<QAbstractButton *>(d->widgetAt(WindowBarPrivate::MinimizeButton));
} }
QAbstractButton *WindowBar::maxButton() const { QAbstractButton *WindowBar::maxButton() const {
Q_D(const WindowBar); Q_D(const WindowBar);
return static_cast<QAbstractButton *>(d->widgetAt(WindowBarPrivate::MaximumButton)); return static_cast<QAbstractButton *>(d->widgetAt(WindowBarPrivate::MaximizeButton));
} }
QAbstractButton *WindowBar::closeButton() const { QAbstractButton *WindowBar::closeButton() const {
@ -131,6 +136,17 @@ namespace QWK {
btn->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred); btn->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred);
} }
void WindowBar::setPinButton(QAbstractButton *btn) {
Q_D(WindowBar);
auto org = takePinButton();
if (org)
org->deleteLater();
if (!btn)
return;
d->setWidgetAt(WindowBarPrivate::PinButton, btn);
connect(btn, &QAbstractButton::clicked, this, &WindowBar::pinRequested);
}
void WindowBar::setMinButton(QAbstractButton *btn) { void WindowBar::setMinButton(QAbstractButton *btn) {
Q_D(WindowBar); Q_D(WindowBar);
auto org = takeMinButton(); auto org = takeMinButton();
@ -138,7 +154,7 @@ namespace QWK {
org->deleteLater(); org->deleteLater();
if (!btn) if (!btn)
return; return;
d->setWidgetAt(WindowBarPrivate::MinimumButton, btn); d->setWidgetAt(WindowBarPrivate::MinimizeButton, btn);
connect(btn, &QAbstractButton::clicked, this, &WindowBar::minimizeRequested); connect(btn, &QAbstractButton::clicked, this, &WindowBar::minimizeRequested);
} }
@ -149,7 +165,7 @@ namespace QWK {
org->deleteLater(); org->deleteLater();
if (!btn) if (!btn)
return; return;
d->setWidgetAt(WindowBarPrivate::MaximumButton, btn); d->setWidgetAt(WindowBarPrivate::MaximizeButton, btn);
connect(btn, &QAbstractButton::clicked, this, &WindowBar::maximizeRequested); connect(btn, &QAbstractButton::clicked, this, &WindowBar::maximizeRequested);
} }
@ -179,9 +195,19 @@ namespace QWK {
return static_cast<QAbstractButton *>(d->takeWidgetAt(WindowBarPrivate::IconButton)); return static_cast<QAbstractButton *>(d->takeWidgetAt(WindowBarPrivate::IconButton));
} }
QAbstractButton *WindowBar::takePinButton() {
Q_D(WindowBar);
auto btn = static_cast<QAbstractButton *>(d->takeWidgetAt(WindowBarPrivate::PinButton));
if (!btn) {
return nullptr;
}
disconnect(btn, &QAbstractButton::clicked, this, &WindowBar::pinRequested);
return btn;
}
QAbstractButton *WindowBar::takeMinButton() { QAbstractButton *WindowBar::takeMinButton() {
Q_D(WindowBar); Q_D(WindowBar);
auto btn = static_cast<QAbstractButton *>(d->takeWidgetAt(WindowBarPrivate::MinimumButton)); auto btn = static_cast<QAbstractButton *>(d->takeWidgetAt(WindowBarPrivate::MinimizeButton));
if (!btn) { if (!btn) {
return nullptr; return nullptr;
} }
@ -191,7 +217,7 @@ namespace QWK {
QAbstractButton *WindowBar::takeMaxButton() { QAbstractButton *WindowBar::takeMaxButton() {
Q_D(WindowBar); Q_D(WindowBar);
auto btn = static_cast<QAbstractButton *>(d->takeWidgetAt(WindowBarPrivate::MaximumButton)); auto btn = static_cast<QAbstractButton *>(d->takeWidgetAt(WindowBarPrivate::MaximizeButton));
if (!btn) { if (!btn) {
return nullptr; return nullptr;
} }

@ -25,6 +25,7 @@ namespace QWK {
QMenuBar *menuBar() const; QMenuBar *menuBar() const;
QLabel *titleLabel() const; QLabel *titleLabel() const;
QAbstractButton *iconButton() const; QAbstractButton *iconButton() const;
QAbstractButton *pinButton() const;
QAbstractButton *minButton() const; QAbstractButton *minButton() const;
QAbstractButton *maxButton() const; QAbstractButton *maxButton() const;
QAbstractButton *closeButton() const; QAbstractButton *closeButton() const;
@ -32,6 +33,7 @@ namespace QWK {
void setMenuBar(QMenuBar *menuBar); void setMenuBar(QMenuBar *menuBar);
void setTitleLabel(QLabel *label); void setTitleLabel(QLabel *label);
void setIconButton(QAbstractButton *btn); void setIconButton(QAbstractButton *btn);
void setPinButton(QAbstractButton *btn);
void setMinButton(QAbstractButton *btn); void setMinButton(QAbstractButton *btn);
void setMaxButton(QAbstractButton *btn); void setMaxButton(QAbstractButton *btn);
void setCloseButton(QAbstractButton *btn); void setCloseButton(QAbstractButton *btn);
@ -39,6 +41,7 @@ namespace QWK {
QMenuBar *takeMenuBar(); QMenuBar *takeMenuBar();
QLabel *takeTitleLabel(); QLabel *takeTitleLabel();
QAbstractButton *takeIconButton(); QAbstractButton *takeIconButton();
QAbstractButton *takePinButton();
QAbstractButton *takeMinButton(); QAbstractButton *takeMinButton();
QAbstractButton *takeMaxButton(); QAbstractButton *takeMaxButton();
QAbstractButton *takeCloseButton(); QAbstractButton *takeCloseButton();
@ -53,6 +56,7 @@ namespace QWK {
void setIconFollowWindow(bool value); void setIconFollowWindow(bool value);
Q_SIGNALS: Q_SIGNALS:
void pinRequested(bool pin = false);
void minimizeRequested(); void minimizeRequested();
void maximizeRequested(bool max = false); void maximizeRequested(bool max = false);
void closeRequested(); void closeRequested();

@ -29,8 +29,9 @@ namespace QWK {
IconButton, IconButton,
MenuWidget, MenuWidget,
TitleLabel, TitleLabel,
MinimumButton, PinButton,
MaximumButton, MinimizeButton,
MaximizeButton,
CloseButton, CloseButton,
}; };

Loading…
Cancel
Save