diff --git a/example/CMakeLists.txt b/example/CMakeLists.txt index 35a8f55..000ccdb 100644 --- a/example/CMakeLists.txt +++ b/example/CMakeLists.txt @@ -94,8 +94,6 @@ set_target_properties(example PROPERTIES #链接库 target_link_libraries(example PRIVATE Qt6::Quick - FramelessHelper::Core - FramelessHelper::Quick fluentuiplugin ) diff --git a/example/qml/component/CustomWindow.qml b/example/qml/component/CustomWindow.qml deleted file mode 100644 index 8eb2114..0000000 --- a/example/qml/component/CustomWindow.qml +++ /dev/null @@ -1,60 +0,0 @@ -import QtQuick -import QtQuick.Layouts -import FluentUI -import org.wangwenx190.FramelessHelper - -FluWindow { - - id:window - - property bool fixSize - property alias titleVisible: title_bar.titleVisible - property bool appBarVisible: true - default property alias content: container.data - - FluAppBar { - id: title_bar - title: window.title - visible: window.appBarVisible - anchors { - top: parent.top - left: parent.left - right: parent.right - } - darkText: lang.dark_mode - } - - Item{ - id:container - anchors{ - top: title_bar.bottom - left: parent.left - right: parent.right - bottom: parent.bottom - } - clip: true - } - - FramelessHelper{ - id:framless_helper - onReady: { - setTitleBarItem(title_bar) - framless_helper.moveWindowToDesktopCenter() - setHitTestVisible(title_bar.minimizeButton()) - setHitTestVisible(title_bar.maximizeButton()) - setHitTestVisible(title_bar.closeButton()) - framless_helper.setWindowFixedSize(fixSize) - title_bar.maximizeButton.visible = !fixSize - window.visible = true - } - } - - function setHitTestVisible(com){ - framless_helper.setHitTestVisible(com) - } - - function setTitleBarItem(com){ - framless_helper.setTitleBarItem(com) - } - -} diff --git a/example/qml/window/AboutWindow.qml b/example/qml/window/AboutWindow.qml index 475333c..818b342 100644 --- a/example/qml/window/AboutWindow.qml +++ b/example/qml/window/AboutWindow.qml @@ -2,9 +2,8 @@ import QtQuick.Controls import QtQuick.Layouts import FluentUI -import "../component" -CustomWindow { +FluWindow { id:window title:"关于" diff --git a/example/qml/window/LoginWindow.qml b/example/qml/window/LoginWindow.qml index 25d8bad..103ab44 100644 --- a/example/qml/window/LoginWindow.qml +++ b/example/qml/window/LoginWindow.qml @@ -2,9 +2,8 @@ import QtQuick.Layouts import QtQuick.Controls import FluentUI -import "../component" -CustomWindow { +FluWindow { id:window title:"登录" diff --git a/example/qml/window/MainWindow.qml b/example/qml/window/MainWindow.qml index 73ac84c..4c395bb 100644 --- a/example/qml/window/MainWindow.qml +++ b/example/qml/window/MainWindow.qml @@ -4,10 +4,9 @@ import QtQuick.Controls import QtQuick.Layouts import Qt.labs.platform import FluentUI -import "../component" import "qrc:///example/qml/global/" -CustomWindow { +FluWindow { id:window title: "FluentUI" diff --git a/example/qml/window/MediaWindow.qml b/example/qml/window/MediaWindow.qml index 1f2d994..d16956a 100644 --- a/example/qml/window/MediaWindow.qml +++ b/example/qml/window/MediaWindow.qml @@ -2,9 +2,8 @@ import QtQuick.Controls import QtQuick.Layouts import FluentUI -import "../component" -CustomWindow { +FluWindow { title:"视频播放器" width: 640 diff --git a/example/qml/window/SingleInstanceWindow.qml b/example/qml/window/SingleInstanceWindow.qml index f5d1387..940db2c 100644 --- a/example/qml/window/SingleInstanceWindow.qml +++ b/example/qml/window/SingleInstanceWindow.qml @@ -2,9 +2,8 @@ import QtQuick.Controls import QtQuick.Layouts import FluentUI -import "../component" -CustomWindow { +FluWindow { id:window title:"SingleInstance" diff --git a/example/qml/window/SingleTaskWindow.qml b/example/qml/window/SingleTaskWindow.qml index 1e6f69e..33195aa 100644 --- a/example/qml/window/SingleTaskWindow.qml +++ b/example/qml/window/SingleTaskWindow.qml @@ -2,9 +2,8 @@ import QtQuick.Controls import QtQuick.Layouts import FluentUI -import "../component" -CustomWindow { +FluWindow { id:window title:"SingleTask" diff --git a/example/qml/window/StandardWindow.qml b/example/qml/window/StandardWindow.qml index 6724753..40347bc 100644 --- a/example/qml/window/StandardWindow.qml +++ b/example/qml/window/StandardWindow.qml @@ -2,9 +2,8 @@ import QtQuick.Controls import QtQuick.Layouts import FluentUI -import "../component" -CustomWindow { +FluWindow { id:window title:"Standard" diff --git a/example/src/main.cpp b/example/src/main.cpp index d4b07bd..cd74929 100644 --- a/example/src/main.cpp +++ b/example/src/main.cpp @@ -4,30 +4,20 @@ #include #include #include -#include -#include #include #include "lang/Lang.h" #include "AppInfo.h" #include "tool/IPC.h" -FRAMELESSHELPER_USE_NAMESPACE - - int main(int argc, char *argv[]) +int main(int argc, char *argv[]) { FluentUI::preInit(); - FramelessHelper::Quick::initialize(); - //将样式设置为Basic,不然会导致组件显示异常 - qputenv("QT_QUICK_CONTROLS_STYLE","Basic"); QGuiApplication::setOrganizationName("ZhuZiChu"); QGuiApplication::setOrganizationDomain("https://zhuzichu520.github.io"); QGuiApplication::setApplicationName("FluentUI"); // QQuickWindow::setGraphicsApi(QSGRendererInterface::Software); QGuiApplication app(argc, argv); FluentUI::postInit(); - // FramelessHelper::Core::setApplicationOSThemeAware(); - // FramelessConfig::instance()->set(Global::Option::EnableBlurBehindWindow); - // FramelessConfig::instance()->set(Global::Option::DisableLazyInitializationForMicaMaterial); AppInfo* appInfo = new AppInfo(); IPC ipc(0); QString activeWindowEvent = "activeWindow"; @@ -45,7 +35,6 @@ FRAMELESSHELPER_USE_NAMESPACE app.setQuitOnLastWindowClosed(false); QQmlApplicationEngine engine; FluentUI::initEngine(&engine); - FramelessHelper::Quick::registerTypes(&engine); QQmlContext * context = engine.rootContext(); Lang* lang = appInfo->lang(); context->setContextProperty("lang",lang); diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index c5e0fa8..8b4b7e5 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -57,6 +57,8 @@ qt_add_qml_module(fluentuiplugin RESOURCES ${resource_files} FluGlobal.h #支持designer DESIGNER_SUPPORTED + DEPENDENCIES + org.wangwenx190.FramelessHelper/auto ) #链接库 @@ -64,6 +66,8 @@ target_link_libraries(fluentuiplugin PUBLIC Qt::CorePrivate Qt::QuickPrivate Qt::QmlPrivate + FramelessHelper::Core + FramelessHelper::Quick ) #链接库 win32库 不然mingw会编译错误 diff --git a/src/FluGlobal.cpp b/src/FluGlobal.cpp index b92411e..52d31b1 100644 --- a/src/FluGlobal.cpp +++ b/src/FluGlobal.cpp @@ -1,17 +1,29 @@ #include "FluGlobal.h" #include +#include +#include + +FRAMELESSHELPER_USE_NAMESPACE; namespace FluentUI { void preInit(){ qDebug()<<"preInit"; + FramelessHelper::Quick::initialize(); + //将样式设置为Basic,不然会导致组件显示异常 + qputenv("QT_QUICK_CONTROLS_STYLE","Basic"); } void postInit(){ qDebug()<<"postInit"; + FramelessHelper::Core::setApplicationOSThemeAware(); + FramelessConfig::instance()->set(Global::Option::EnableBlurBehindWindow); + FramelessConfig::instance()->set(Global::Option::DisableLazyInitializationForMicaMaterial); } void initEngine(QQmlApplicationEngine* engine){ qDebug()<<"initEngine"; + FramelessHelper::Quick::registerTypes(engine); + qDebug()<<"FramelessHelper::Quick::registerTypes(engine)"; } } diff --git a/src/imports/FluentUI/Controls/FluWindow.qml b/src/imports/FluentUI/Controls/FluWindow.qml index 2c468ef..6970098 100644 --- a/src/imports/FluentUI/Controls/FluWindow.qml +++ b/src/imports/FluentUI/Controls/FluWindow.qml @@ -3,6 +3,7 @@ import QtQuick.Window import QtQuick.Controls import QtQuick.Layouts import FluentUI +import org.wangwenx190.FramelessHelper Window { enum LaunchMode { @@ -11,6 +12,9 @@ Window { SingleInstance } default property alias content: container.data + property bool fixSize + property alias titleVisible: title_bar.titleVisible + property bool appBarVisible: true property bool closeDestory: true property int launchMode: FluWindow.Standard property string route @@ -47,15 +51,43 @@ Window { } } } + FluAppBar { + id: title_bar + title: window.title + visible: window.appBarVisible + anchors { + top: parent.top + left: parent.left + right: parent.right + } + } Item{ id:container - anchors.fill: parent + anchors{ + top: title_bar.bottom + left: parent.left + right: parent.right + bottom: parent.bottom + } clip: true } FluInfoBar{ id:infoBar root: window } + FramelessHelper{ + id:framless_helper + onReady: { + setTitleBarItem(title_bar) + framless_helper.moveWindowToDesktopCenter() + setHitTestVisible(title_bar.minimizeButton()) + setHitTestVisible(title_bar.maximizeButton()) + setHitTestVisible(title_bar.closeButton()) + framless_helper.setWindowFixedSize(fixSize) + title_bar.maximizeButton.visible = !fixSize + window.visible = true + } + } WindowHelper{ id:helper } @@ -77,6 +109,12 @@ Window { function deleteWindow(){ helper.deleteWindow() } + function setHitTestVisible(com){ + framless_helper.setHitTestVisible(com) + } + function setTitleBarItem(com){ + framless_helper.setTitleBarItem(com) + } function onResult(data){ if(pageRegister){ pageRegister.onResult(data)