update
parent
5df0efbc58
commit
d43e661388
|
@ -59,7 +59,7 @@ void FluApp::navigate(const QString& route){
|
||||||
view->setSource((routes().value(route).toString()));
|
view->setSource((routes().value(route).toString()));
|
||||||
if(isAppWindow){
|
if(isAppWindow){
|
||||||
QObject::connect(view->engine(), &QQmlEngine::quit, qApp, &QCoreApplication::quit);
|
QObject::connect(view->engine(), &QQmlEngine::quit, qApp, &QCoreApplication::quit);
|
||||||
QObject::connect(qApp, &QGuiApplication::aboutToQuit, qApp, [&view](){view->setSource({});});
|
// QObject::connect(qApp, &QGuiApplication::aboutToQuit, qApp, [&view](){view->setSource({});});
|
||||||
}else{
|
}else{
|
||||||
view->closeDeleteLater();
|
view->closeDeleteLater();
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,8 +38,13 @@ win32 {
|
||||||
SOURCES += \
|
SOURCES += \
|
||||||
FramelessView_win.cpp
|
FramelessView_win.cpp
|
||||||
} else {
|
} else {
|
||||||
|
macos {
|
||||||
|
SOURCES += \
|
||||||
|
FramelessView_mac.cpp
|
||||||
|
}else{
|
||||||
SOURCES += \
|
SOURCES += \
|
||||||
FramelessView_unix.cpp
|
FramelessView_unix.cpp
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
DEFINES += VERSION_IN=\\\"1.0.0\\\"
|
DEFINES += VERSION_IN=\\\"1.0.0\\\"
|
||||||
|
|
|
@ -0,0 +1,109 @@
|
||||||
|
#include "FramelessView.h"
|
||||||
|
#include <QGuiApplication>
|
||||||
|
#include <QQuickItem>
|
||||||
|
#include <QScreen>
|
||||||
|
#include <QWindow>
|
||||||
|
|
||||||
|
class FramelessViewPrivate
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
bool m_isMax = false;
|
||||||
|
bool m_isFull = false;
|
||||||
|
bool m_deleteLater = false;
|
||||||
|
QQuickItem *m_titleItem = nullptr;
|
||||||
|
};
|
||||||
|
FramelessView::FramelessView(QWindow *parent) : Super(parent), d(new FramelessViewPrivate)
|
||||||
|
{
|
||||||
|
// setFlags(Qt::CustomizeWindowHint | Qt::Window | Qt::FramelessWindowHint | Qt::WindowMinMaxButtonsHint | Qt::WindowTitleHint | Qt::WindowSystemMenuHint);
|
||||||
|
setResizeMode(SizeRootObjectToView);
|
||||||
|
setIsMax(windowState() == Qt::WindowMaximized);
|
||||||
|
setIsFull(windowState() == Qt::WindowFullScreen);
|
||||||
|
connect(this, &QWindow::windowStateChanged, this, [&](Qt::WindowState state) {
|
||||||
|
(void)state;
|
||||||
|
setIsMax(windowState() == Qt::WindowMaximized);
|
||||||
|
setIsFull(windowState() == Qt::WindowFullScreen);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
FramelessView::~FramelessView()
|
||||||
|
{
|
||||||
|
delete d;
|
||||||
|
}
|
||||||
|
void FramelessView::showEvent(QShowEvent *e)
|
||||||
|
{
|
||||||
|
Super::showEvent(e);
|
||||||
|
}
|
||||||
|
QRect FramelessView::calcCenterGeo(const QRect &screenGeo, const QSize &normalSize)
|
||||||
|
{
|
||||||
|
int w = normalSize.width();
|
||||||
|
int h = normalSize.height();
|
||||||
|
int x = screenGeo.x() + (screenGeo.width() - w) / 2;
|
||||||
|
int y = screenGeo.y() + (screenGeo.height() - h) / 2;
|
||||||
|
if (screenGeo.width() < w) {
|
||||||
|
x = screenGeo.x();
|
||||||
|
w = screenGeo.width();
|
||||||
|
}
|
||||||
|
if (screenGeo.height() < h) {
|
||||||
|
y = screenGeo.y();
|
||||||
|
h = screenGeo.height();
|
||||||
|
}
|
||||||
|
|
||||||
|
return { x, y, w, h };
|
||||||
|
}
|
||||||
|
void FramelessView::moveToScreenCenter()
|
||||||
|
{
|
||||||
|
auto geo = calcCenterGeo(screen()->availableGeometry(), size());
|
||||||
|
if (minimumWidth() > geo.width() || minimumHeight() > geo.height()) {
|
||||||
|
setMinimumSize(geo.size());
|
||||||
|
}
|
||||||
|
setGeometry(geo);
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
void FramelessView::closeDeleteLater(){
|
||||||
|
d->m_deleteLater = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool FramelessView::isMax() const
|
||||||
|
{
|
||||||
|
return d->m_isMax;
|
||||||
|
}
|
||||||
|
bool FramelessView::isFull() const
|
||||||
|
{
|
||||||
|
return d->m_isFull;
|
||||||
|
}
|
||||||
|
QQuickItem *FramelessView::titleItem() const
|
||||||
|
{
|
||||||
|
return d->m_titleItem;
|
||||||
|
}
|
||||||
|
void FramelessView::setIsMax(bool isMax)
|
||||||
|
{
|
||||||
|
if (d->m_isMax == isMax)
|
||||||
|
return;
|
||||||
|
|
||||||
|
d->m_isMax = isMax;
|
||||||
|
emit isMaxChanged(d->m_isMax);
|
||||||
|
}
|
||||||
|
void FramelessView::setIsFull(bool isFull)
|
||||||
|
{
|
||||||
|
if(d->m_isFull == isFull)
|
||||||
|
return;
|
||||||
|
|
||||||
|
d->m_isFull = isFull;
|
||||||
|
emit isFullChanged(d->m_isFull);
|
||||||
|
}
|
||||||
|
void FramelessView::setTitleItem(QQuickItem *item)
|
||||||
|
{
|
||||||
|
d->m_titleItem = item;
|
||||||
|
}
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||||
|
bool FramelessView::nativeEvent(const QByteArray &eventType, void *message, qintptr *result)
|
||||||
|
#else
|
||||||
|
bool FramelessView::nativeEvent(const QByteArray &eventType, void *message, long *result)
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
return Super::nativeEvent(eventType, message, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
void FramelessView::resizeEvent(QResizeEvent *e)
|
||||||
|
{
|
||||||
|
Super::resizeEvent(e);
|
||||||
|
}
|
|
@ -14,7 +14,7 @@ public:
|
||||||
};
|
};
|
||||||
FramelessView::FramelessView(QWindow *parent) : Super(parent), d(new FramelessViewPrivate)
|
FramelessView::FramelessView(QWindow *parent) : Super(parent), d(new FramelessViewPrivate)
|
||||||
{
|
{
|
||||||
setFlags(Qt::CustomizeWindowHint | Qt::Window | Qt::FramelessWindowHint | Qt::WindowMinMaxButtonsHint | Qt::WindowTitleHint | Qt::WindowSystemMenuHint);
|
// setFlags(Qt::CustomizeWindowHint | Qt::Window | Qt::FramelessWindowHint | Qt::WindowMinMaxButtonsHint | Qt::WindowTitleHint | Qt::WindowSystemMenuHint);
|
||||||
setResizeMode(SizeRootObjectToView);
|
setResizeMode(SizeRootObjectToView);
|
||||||
setIsMax(windowState() == Qt::WindowMaximized);
|
setIsMax(windowState() == Qt::WindowMaximized);
|
||||||
setIsFull(windowState() == Qt::WindowFullScreen);
|
setIsFull(windowState() == Qt::WindowFullScreen);
|
||||||
|
|
|
@ -13,13 +13,15 @@ Rectangle{
|
||||||
return borerlessColor
|
return borerlessColor
|
||||||
return Window.window.active ? borerlessColor : Qt.lighter(borerlessColor,1.1)
|
return Window.window.active ? borerlessColor : Qt.lighter(borerlessColor,1.1)
|
||||||
}
|
}
|
||||||
height: 50
|
property bool isMacos: Qt.platform.os === "osx"
|
||||||
|
height: isMacos ? 0 : 50
|
||||||
width: {
|
width: {
|
||||||
if(parent==null)
|
if(parent==null)
|
||||||
return 200
|
return 200
|
||||||
return parent.width
|
return parent.width
|
||||||
}
|
}
|
||||||
z: 65535
|
z: 65535
|
||||||
|
clip: true
|
||||||
property string title: "标题"
|
property string title: "标题"
|
||||||
property color textColor: FluTheme.isDark ? "#000000" : "#FFFFFF"
|
property color textColor: FluTheme.isDark ? "#000000" : "#FFFFFF"
|
||||||
property bool showDark: false
|
property bool showDark: false
|
||||||
|
|
|
@ -21,7 +21,12 @@ Item {
|
||||||
property int minimumHeight
|
property int minimumHeight
|
||||||
property int maximumHeight
|
property int maximumHeight
|
||||||
|
|
||||||
|
property bool isMacos: Qt.platform.os === "osx"
|
||||||
|
|
||||||
property int borderless:{
|
property int borderless:{
|
||||||
|
if(isMacos){
|
||||||
|
return 0
|
||||||
|
}
|
||||||
if(window === null)
|
if(window === null)
|
||||||
return 4
|
return 4
|
||||||
if(Window.window.visibility === Window.Maximized){
|
if(Window.window.visibility === Window.Maximized){
|
||||||
|
|
Loading…
Reference in New Issue