From 0dbbba56da52fb1752b5a2f16d23c4d0ceb0377d Mon Sep 17 00:00:00 2001 From: zhuzihcu Date: Thu, 25 May 2023 17:00:48 +0800 Subject: [PATCH] update --- example/qml/TestWindow.qml | 4 + example/qml/component/CodeExpander.qml | 169 +++++++++--------- example/src/AppInfo.cpp | 29 ++- example/src/AppInfo.h | 4 + example/src/main.cpp | 23 +-- src/FluApp.cpp | 2 - src/FluApp.h | 1 + src/imports/FluentUI/Controls/FluDivider.qml | 5 - src/imports/FluentUI/Controls/FluIcon.qml | 5 + .../FluentUI/Controls/FluIconButton.qml | 10 +- 10 files changed, 136 insertions(+), 116 deletions(-) diff --git a/example/qml/TestWindow.qml b/example/qml/TestWindow.qml index b8d6535..f75f284 100644 --- a/example/qml/TestWindow.qml +++ b/example/qml/TestWindow.qml @@ -18,6 +18,10 @@ FluWindow { launchMode: FluWindow.SingleTask visible: true + Component.onCompleted: { +// FluApp.init(window) + } + FluNavigationView2{ id:nav_view anchors.fill: parent diff --git a/example/qml/component/CodeExpander.qml b/example/qml/component/CodeExpander.qml index 3f673a6..fd98792 100644 --- a/example/qml/component/CodeExpander.qml +++ b/example/qml/component/CodeExpander.qml @@ -24,6 +24,11 @@ FluExpander{ color:FluTheme.dark ? Qt.rgba(50/255,50/255,50/255,1) : Qt.rgba(247/255,247/255,247/255,1) border.color: FluTheme.dark ? Qt.rgba(45/255,45/255,45/255,1) : Qt.rgba(226/255,229/255,234/255,1) border.width: 1 + Behavior on color{ + ColorAnimation { + duration: 300 + } + } } } @@ -42,91 +47,91 @@ FluExpander{ } function htmlEncode(e){ - var i,s; - for(i in s={ - "&":/&/g,//""//":/"/g,"'":/'/g, - "<":/":/>/g,"
":/\n/g, - " ":/ /g," ":/\t/g - })e=e.replace(s[i],i); - return e; + var i,s; + for(i in s={ + "&":/&/g,//""//":/"/g,"'":/'/g, + "<":/":/>/g,"
":/\n/g, + " ":/ /g," ":/\t/g + })e=e.replace(s[i],i); + return e; } function highlightQmlCode(code) { - // 定义 QML 关键字列表 - var qmlKeywords = [ - "FluTextButton", - "FluAppBar", - "FluAutoSuggestBox", - "FluBadge", - "FluButton", - "FluCalendarPicker", - "FluCalendarView", - "FluCarousel", - "FluCheckBox", - "FluColorPicker", - "FluColorView", - "FluComboBox", - "FluContentDialog", - "FluContentPage", - "FluDatePicker", - "FluDivider", - "FluDropDownButton", - "FluExpander", - "FluFilledButton", - "FluFlipView", - "FluFocusRectangle", - "FluIcon", - "FluIconButton", - "FluInfoBar", - "FluItem", - "FluMediaPlayer", - "FluMenu", - "FluMenuItem", - "FluMultilineTextBox", - "FluNavigationView", - "FluObject", - "FluPaneItem", - "FluPaneItemExpander", - "FluPaneItemHeader", - "FluPaneItemSeparator", - "FluPivot", - "FluPivotItem", - "FluProgressBar", - "FluProgressRing", - "FluRadioButton", - "FluRectangle", - "FluScrollablePage", - "FluScrollBar", - "FluShadow", - "FluSlider", - "FluTabView", - "FluText", - "FluTextArea", - "FluTextBox", - "FluTextBoxBackground", - "FluTextBoxMenu", - "FluTextButton", - "FluTextFiled", - "FluTimePicker", - "FluToggleSwitch", - "FluTooltip", - "FluTreeView", - "FluWindow", - "FluWindowResize", - "FluToggleButton", - "FluTableView", - "FluColors", - "FluTheme", - "FluStatusView", - "FluRatingControl", - "FluPasswordBox", - "FluBreadcrumbBar", - "FluCopyableText", - "FluAcrylic" - ]; - code = code.replace(/\n/g, "
"); - code = code.replace(/ /g, " "); - return code.replace(RegExp("\\b(" + qmlKeywords.join("|") + ")\\b", "g"), "$1"); + // 定义 QML 关键字列表 + var qmlKeywords = [ + "FluTextButton", + "FluAppBar", + "FluAutoSuggestBox", + "FluBadge", + "FluButton", + "FluCalendarPicker", + "FluCalendarView", + "FluCarousel", + "FluCheckBox", + "FluColorPicker", + "FluColorView", + "FluComboBox", + "FluContentDialog", + "FluContentPage", + "FluDatePicker", + "FluDivider", + "FluDropDownButton", + "FluExpander", + "FluFilledButton", + "FluFlipView", + "FluFocusRectangle", + "FluIcon", + "FluIconButton", + "FluInfoBar", + "FluItem", + "FluMediaPlayer", + "FluMenu", + "FluMenuItem", + "FluMultilineTextBox", + "FluNavigationView", + "FluObject", + "FluPaneItem", + "FluPaneItemExpander", + "FluPaneItemHeader", + "FluPaneItemSeparator", + "FluPivot", + "FluPivotItem", + "FluProgressBar", + "FluProgressRing", + "FluRadioButton", + "FluRectangle", + "FluScrollablePage", + "FluScrollBar", + "FluShadow", + "FluSlider", + "FluTabView", + "FluText", + "FluTextArea", + "FluTextBox", + "FluTextBoxBackground", + "FluTextBoxMenu", + "FluTextButton", + "FluTextFiled", + "FluTimePicker", + "FluToggleSwitch", + "FluTooltip", + "FluTreeView", + "FluWindow", + "FluWindowResize", + "FluToggleButton", + "FluTableView", + "FluColors", + "FluTheme", + "FluStatusView", + "FluRatingControl", + "FluPasswordBox", + "FluBreadcrumbBar", + "FluCopyableText", + "FluAcrylic" + ]; + code = code.replace(/\n/g, "
"); + code = code.replace(/ /g, " "); + return code.replace(RegExp("\\b(" + qmlKeywords.join("|") + ")\\b", "g"), "$1"); } diff --git a/example/src/AppInfo.cpp b/example/src/AppInfo.cpp index 91a2d08..734ae20 100644 --- a/example/src/AppInfo.cpp +++ b/example/src/AppInfo.cpp @@ -1,7 +1,9 @@ #include "AppInfo.h" + +#include +#include #include "lang/En.h" #include "lang/Zh.h" -#include #define STR(x) #x #define VER_JOIN(a,b,c,d) STR(a.b.c.d) @@ -15,6 +17,16 @@ AppInfo::AppInfo(QObject *parent) lang(new En()); } +void AppInfo::init(QQmlApplicationEngine *engine){ + QQmlContext * context = engine->rootContext(); + Lang* lang = this->lang(); + context->setContextProperty("lang",lang); + QObject::connect(this,&AppInfo::langChanged,this,[=]{ + context->setContextProperty("lang",this->lang()); + }); + context->setContextProperty("appInfo",this); +} + void AppInfo::changeLang(const QString& locale){ if(_lang){ _lang->deleteLater(); @@ -27,3 +39,18 @@ void AppInfo::changeLang(const QString& locale){ lang(new En()); } } + +bool AppInfo::isOwnerProcess(IPC *ipc){ + QString activeWindowEvent = "activeWindow"; + if(!ipc->isCurrentOwner()){ + ipc->postEvent(activeWindowEvent,QString().toUtf8(),0); + return false; + } + if(ipc->isAttached()){ + ipc->registerEventHandler(activeWindowEvent,[=](const QByteArray&){ + Q_EMIT this->activeWindow(); + return true; + }); + } + return true; +} diff --git a/example/src/AppInfo.h b/example/src/AppInfo.h index 828152b..8e3fb9d 100644 --- a/example/src/AppInfo.h +++ b/example/src/AppInfo.h @@ -2,6 +2,8 @@ #define APPINFO_H #include +#include +#include "tool/IPC.h" #include "lang/Lang.h" #include "stdafx.h" @@ -12,6 +14,8 @@ class AppInfo : public QObject Q_PROPERTY_AUTO(Lang*,lang) public: explicit AppInfo(QObject *parent = nullptr); + void init(QQmlApplicationEngine *engine); + bool isOwnerProcess(IPC *ipc); Q_INVOKABLE void changeLang(const QString& locale); Q_SIGNAL void activeWindow(); }; diff --git a/example/src/main.cpp b/example/src/main.cpp index d923b32..e3f1d2c 100644 --- a/example/src/main.cpp +++ b/example/src/main.cpp @@ -6,13 +6,11 @@ #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[]) { //将样式设置为Basic,不然会导致组件显示异常 qputenv("QT_QUICK_CONTROLS_STYLE","Basic"); @@ -31,28 +29,13 @@ FRAMELESSHELPER_USE_NAMESPACE #endif AppInfo* appInfo = new AppInfo(); IPC ipc(0); - QString activeWindowEvent = "activeWindow"; - if(!ipc.isCurrentOwner()){ - ipc.postEvent(activeWindowEvent,QString().toUtf8(),0); - delete appInfo; + if(!appInfo->isOwnerProcess(&ipc)){ return 0; } - if(ipc.isAttached()){ - ipc.registerEventHandler(activeWindowEvent,[&appInfo](const QByteArray&){ - Q_EMIT appInfo->activeWindow(); - return true; - }); - } app.setQuitOnLastWindowClosed(false); QQmlApplicationEngine engine; FramelessHelper::Quick::registerTypes(&engine); - QQmlContext * context = engine.rootContext(); - Lang* lang = appInfo->lang(); - context->setContextProperty("lang",lang); - QObject::connect(appInfo,&AppInfo::langChanged,&app,[context,appInfo]{ - context->setContextProperty("lang",appInfo->lang()); - }); - context->setContextProperty("appInfo",appInfo); + appInfo->init(&engine); const QUrl url(QStringLiteral("qrc:/example/qml/App.qml")); // const QUrl url(QStringLiteral("qrc:/example/qml/TestWindow.qml")); QObject::connect(&engine, &QQmlApplicationEngine::objectCreated, diff --git a/src/FluApp.cpp b/src/FluApp.cpp index 5e4e067..eb6966e 100644 --- a/src/FluApp.cpp +++ b/src/FluApp.cpp @@ -23,11 +23,9 @@ FluApp *FluApp::getInstance() FluApp::FluApp(QObject *parent) : QObject{parent} { - QFontDatabase::addApplicationFont(":/FluentUI/Font/Segoe_Fluent_Icons.ttf"); } FluApp::~FluApp(){ - } void FluApp::init(QQuickWindow *window){ diff --git a/src/FluApp.h b/src/FluApp.h index ecdbcbf..d116455 100644 --- a/src/FluApp.h +++ b/src/FluApp.h @@ -27,6 +27,7 @@ class FluApp : public QObject */ Q_PROPERTY_AUTO(QJsonObject,routes); + QML_FOREIGN(FluApp) QML_NAMED_ELEMENT(FluApp) QML_SINGLETON private: diff --git a/src/imports/FluentUI/Controls/FluDivider.qml b/src/imports/FluentUI/Controls/FluDivider.qml index 3efaa46..b41ef1c 100644 --- a/src/imports/FluentUI/Controls/FluDivider.qml +++ b/src/imports/FluentUI/Controls/FluDivider.qml @@ -4,9 +4,4 @@ import FluentUI Rectangle { color: FluTheme.dark ? Window.active ? Qt.rgba(55/255,55/255,55/255,1):Qt.rgba(45/255,45/255,45/255,1) : Qt.rgba(226/255,230/255,234/255,1) - Behavior on color{ - ColorAnimation { - duration: 300 - } - } } diff --git a/src/imports/FluentUI/Controls/FluIcon.qml b/src/imports/FluentUI/Controls/FluIcon.qml index 156990a..cade730 100644 --- a/src/imports/FluentUI/Controls/FluIcon.qml +++ b/src/imports/FluentUI/Controls/FluIcon.qml @@ -13,4 +13,9 @@ Text { verticalAlignment: Text.AlignVCenter color: iconColor text: (String.fromCharCode(iconSource).toString(16)) + + FontLoader{ + source: "../Font/Segoe_Fluent_Icons.ttf" + } + } diff --git a/src/imports/FluentUI/Controls/FluIconButton.qml b/src/imports/FluentUI/Controls/FluIconButton.qml index cdd28ae..05231ef 100644 --- a/src/imports/FluentUI/Controls/FluIconButton.qml +++ b/src/imports/FluentUI/Controls/FluIconButton.qml @@ -51,17 +51,15 @@ Button { } } contentItem: Item{ - Text { + FluIcon { id:text_icon - font.family: "Segoe Fluent Icons" font.pixelSize: iconSize - width: iconSize - height: iconSize + iconSize: control.iconSize horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter anchors.centerIn: parent - color:control.iconColor - text: (String.fromCharCode(iconSource).toString(16)); + iconColor: control.iconColor + iconSource: control.iconSource; } FluTooltip{ id:tool_tip