diff --git a/example/example.pro b/example/example.pro index 6b026c6..6d0faed 100644 --- a/example/example.pro +++ b/example/example.pro @@ -3,6 +3,7 @@ CONFIG += c++17 DEFINES += QT_DEPRECATED_WARNINGS QT_NO_WARNING_OUTPUT HEADERS += \ + stdafx.h \ ChatController.h \ AppInfo.h diff --git a/example/page/AboutPage.qml b/example/page/AboutPage.qml index 7616c43..f3b0a55 100644 --- a/example/page/AboutPage.qml +++ b/example/page/AboutPage.qml @@ -13,6 +13,7 @@ FluWindow { minimumHeight: 600 maximumWidth: 500 maximumHeight: 600 + launchMode: FluWindow.SingleTask title:"关于" diff --git a/src/FluApp.cpp b/src/FluApp.cpp index 47d91ab..53a6a9a 100644 --- a/src/FluApp.cpp +++ b/src/FluApp.cpp @@ -44,8 +44,8 @@ void FluApp::init(QQuickWindow *window){ void FluApp::run(){ #ifdef Q_OS_WIN if(!isCompositionEnabled()){ - FluTheme::getInstance()->frameless(false); - } + FluTheme::getInstance()->frameless(false); + } #endif navigate(initialRoute()); } @@ -58,11 +58,33 @@ void FluApp::navigate(const QString& route,const QJsonObject& argument,FluRegist QQmlEngine *engine = qmlEngine(appWindow); QQmlComponent component(engine, routes().value(route).toString()); QVariantMap properties; + properties.insert("route",route); if(fluRegister){ properties.insert("pageRegister",QVariant::fromValue(fluRegister)); } properties.insert("argument",argument); QQuickWindow *view = qobject_cast(component.createWithInitialProperties(properties)); + + int launchMode = view->property("launchMode").toInt(); + if(launchMode==1){ + for (auto& pair : wnds) { + QString r = pair->property("route").toString(); + if(r == route){ + pair->requestActivate(); + delete view; + return; + } + } + }else if(launchMode==2){ + for (auto& pair : wnds) { + QString r = pair->property("route").toString(); + if(r == route){ + pair->close(); + break; + } + } + } + if(FluTheme::getInstance()->frameless()){ view->setFlag(Qt::FramelessWindowHint,true); } diff --git a/src/controls/FluWindow.qml b/src/controls/FluWindow.qml index fb60469..c1df91b 100644 --- a/src/controls/FluWindow.qml +++ b/src/controls/FluWindow.qml @@ -6,11 +6,21 @@ import FluentUI ApplicationWindow { - id:window + + enum LaunchMode { + Standard, + SingleTask, + SingleInstance + } + default property alias content: container.data + property int launchMode: FluWindow.Standard + property string route property var argument:({}) property var pageRegister signal initArgument(var argument) + + id:window background: Rectangle{ color: { if(active){