main
zhuzihcu 2023-03-13 18:23:46 +08:00
parent 2b9e9b2159
commit 7282a6f8d1
15 changed files with 256 additions and 50 deletions

View File

@ -12,9 +12,9 @@ Window {
FluApp.init(app,properties) FluApp.init(app,properties)
FluTheme.isDark = false FluTheme.isDark = false
FluApp.routes = { FluApp.routes = {
"/":"qrc:/MainPage.qml", "/":"qrc:/page/MainPage.qml",
"/Setting":"qrc:/SettingPage.qml", "/about":"qrc:/page/AboutPage.qml",
"/About":"qrc:/AboutPage.qml", "/login":"qrc:/page/LoginPage.qml",
} }
FluApp.initialRoute = "/" FluApp.initialRoute = "/"
FluApp.run() FluApp.run()

View File

@ -1,29 +0,0 @@
import QtQuick 2.15
import FluentUI 1.0
FluWindow {
width: 500
height: 600
title:"设置"
FluAppBar{
id:appbar
title:"设置"
}
FluText{
text:"设置"
fontStyle: FluText.Display
anchors.centerIn: parent
MouseArea{
anchors.fill: parent
onClicked: {
FluApp.navigate("/About")
}
}
}
}

54
example/T_Menu.qml Normal file
View File

@ -0,0 +1,54 @@
import QtQuick 2.15
import QtQuick.Layouts 1.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15
import QtGraphicalEffects 1.15
import FluentUI 1.0
FluScrollablePage{
title:"Menu"
FluButton{
text:"左击菜单"
Layout.topMargin: 20
Layout.leftMargin: 15
onClicked:{
menu.popup()
}
}
FluButton{
text:"右击菜单"
Layout.topMargin: 20
Layout.leftMargin: 15
onClicked: {
showSuccess("请按鼠标右击")
}
MouseArea{
anchors.fill: parent
acceptedButtons: Qt.RightButton
onClicked: {
menu.popup()
}
}
}
FluMenu{
id:menu
FluMenuItem{
text:"删除"
onClicked: {
showError("删除")
}
}
FluMenuItem{
text:"修改"
onClicked: {
showError("修改")
}
}
}
}

65
example/T_Multiwindow.qml Normal file
View File

@ -0,0 +1,65 @@
import QtQuick 2.15
import QtQuick.Layouts 1.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15
import QtGraphicalEffects 1.15
import FluentUI 1.0
FluScrollablePage{
title:"MultiWindow"
FluArea{
width: parent.width
height: 68
paddings: 10
Layout.topMargin: 20
Column{
spacing: 5
anchors{
verticalCenter: parent.verticalCenter
left: parent.left
}
FluText{
text:"页面跳转,不携带任何参数"
}
FluButton{
text:"点击跳转"
onClicked: {
FluApp.navigate("/about")
}
}
}
}
FluArea{
width: parent.width
height: 68
paddings: 10
Layout.topMargin: 20
Column{
spacing: 5
anchors{
verticalCenter: parent.verticalCenter
left: parent.left
}
FluText{
text:"页面跳转,并携带参数"
}
FluButton{
text:"点击跳转"
onClicked: {
FluApp.navigate("/login",{username:"zhuzichu"})
}
}
}
}
}

View File

@ -0,0 +1,71 @@
import QtQuick 2.15
import QtQuick.Layouts 1.15
import FluentUI 1.0
FluWindow {
id:window
width: 400
height: 400
minimumWidth: 400
minimumHeight: 400
maximumWidth: 400
maximumHeight: 400
modality:2
title:"登录"
onInitArgument:
(argument)=>{
textbox_uesrname.text = argument.username
textbox_password.focus = true
}
FluAppBar{
id:appbar
title:"登录"
}
ColumnLayout{
anchors{
left: parent.left
right: parent.right
verticalCenter: parent.verticalCenter
}
FluAutoSuggestBox{
id:textbox_uesrname
values:["Admin","User"]
placeholderText: "请输入账号"
Layout.preferredWidth: 260
Layout.alignment: Qt.AlignHCenter
}
FluTextBox{
id:textbox_password
Layout.topMargin: 20
Layout.preferredWidth: 260
placeholderText: "请输入密码"
echoMode:TextInput.Password
Layout.alignment: Qt.AlignHCenter
}
FluFilledButton{
text:"登录"
Layout.alignment: Qt.AlignHCenter
Layout.topMargin: 20
onClicked:{
if(textbox_password.text === ""){
showError("请随便输入一个密码")
return
}
window.close()
}
}
}
}

View File

@ -9,7 +9,7 @@ import FluentUI 1.0
FluWindow { FluWindow {
id:rootwindow id:rootwindow
width: 860 width: 860
height: 680 height: 600
title: "FluentUI" title: "FluentUI"
minimumWidth: 500 minimumWidth: 500
minimumHeight: 400 minimumHeight: 400
@ -59,6 +59,13 @@ FluWindow {
} }
} }
FluPaneItem{
title:"Menu"
onTap:{
nav_view.push("qrc:/T_Menu.qml")
}
}
FluPaneItem{ FluPaneItem{
title:"TimePicker" title:"TimePicker"
onTap:{ onTap:{
@ -126,6 +133,14 @@ FluWindow {
} }
} }
FluPaneItem{
title:"MultiWindow"
onTap:{
nav_view.push("qrc:/T_MultiWindow.qml")
}
}
FluPaneItemHeader{ FluPaneItemHeader{
title:"Theming" title:"Theming"
} }
@ -164,7 +179,7 @@ FluWindow {
FluPaneItem{ FluPaneItem{
title:"关于" title:"关于"
onTap:{ onTap:{
FluApp.navigate("/About") FluApp.navigate("/about")
} }
} }
} }

View File

@ -3,8 +3,6 @@
<file>T_ToggleSwitch.qml</file> <file>T_ToggleSwitch.qml</file>
<file>T_Typography.qml</file> <file>T_Typography.qml</file>
<file>App.qml</file> <file>App.qml</file>
<file>SettingPage.qml</file>
<file>AboutPage.qml</file>
<file>T_Buttons.qml</file> <file>T_Buttons.qml</file>
<file>T_Rectangle.qml</file> <file>T_Rectangle.qml</file>
<file>T_InfoBar.qml</file> <file>T_InfoBar.qml</file>
@ -29,8 +27,12 @@
<file>T_Dialog.qml</file> <file>T_Dialog.qml</file>
<file>T_TreeView.qml</file> <file>T_TreeView.qml</file>
<file>T_Expander.qml</file> <file>T_Expander.qml</file>
<file>MainPage.qml</file>
<file>T_TimePicker.qml</file> <file>T_TimePicker.qml</file>
<file>T_DatePicker.qml</file> <file>T_DatePicker.qml</file>
<file>T_Menu.qml</file>
<file>page/AboutPage.qml</file>
<file>page/MainPage.qml</file>
<file>T_MultiWindow.qml</file>
<file>page/LoginPage.qml</file>
</qresource> </qresource>
</RCC> </RCC>

View File

@ -33,14 +33,14 @@ void FluApp::run(){
navigate(initialRoute()); navigate(initialRoute());
} }
void FluApp::navigate(const QString& route){ void FluApp::navigate(const QString& route,const QJsonObject& argument){
if(!routes().contains(route)){ if(!routes().contains(route)){
qErrnoWarning("没有找到当前路由"); qErrnoWarning("没有找到当前路由");
return; return;
} }
bool isAppWindow = route == initialRoute(); bool isAppWindow = route == initialRoute();
FramelessView *view = new FramelessView(); FramelessView *view = new FramelessView();
view->setProperty("argument",argument);
QMapIterator<QString, QVariant> iterator(properties); QMapIterator<QString, QVariant> iterator(properties);
while (iterator.hasNext()) { while (iterator.hasNext()) {
iterator.next(); iterator.next();
@ -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();
} }

View File

@ -24,7 +24,7 @@ public:
Q_INVOKABLE void run(); Q_INVOKABLE void run();
Q_INVOKABLE void navigate(const QString& route); Q_INVOKABLE void navigate(const QString& route,const QJsonObject& argument = {});
Q_INVOKABLE void init(QWindow *window,QMap<QString, QVariant> properties); Q_INVOKABLE void init(QWindow *window,QMap<QString, QVariant> properties);

View File

@ -10,9 +10,9 @@ void WindowHelper::setTitle(const QString& text){
window->setTitle(text); window->setTitle(text);
} }
QJsonObject WindowHelper::initWindow(FramelessView* window){
void WindowHelper::initWindow(FramelessView* window){
this->window = window; this->window = window;
return window->property("argument").toJsonObject();
} }
void WindowHelper::setMinimumWidth(int width){ void WindowHelper::setMinimumWidth(int width){
@ -27,3 +27,19 @@ void WindowHelper::setMinimumHeight(int height){
void WindowHelper::setMaximumHeight(int height){ void WindowHelper::setMaximumHeight(int height){
this->window->setMaximumHeight(height); this->window->setMaximumHeight(height);
} }
void WindowHelper::updateWindow(){
this->window->setFlag(Qt::Window,false);
this->window->setFlag(Qt::Window,true);
}
void WindowHelper::setModality(int type){
if(type == 0){
this->window->setModality(Qt::NonModal);
}else if(type == 1){
this->window->setModality(Qt::WindowModal);
}else if(type == 2){
this->window->setModality(Qt::ApplicationModal);
}else{
this->window->setModality(Qt::NonModal);
}
}

View File

@ -5,6 +5,7 @@
#include <QQuickWindow> #include <QQuickWindow>
#include <QQuickItem> #include <QQuickItem>
#include <QWindow> #include <QWindow>
#include <QJsonObject>
#include "FramelessView.h" #include "FramelessView.h"
class WindowHelper : public QObject class WindowHelper : public QObject
@ -14,12 +15,14 @@ class WindowHelper : public QObject
public: public:
explicit WindowHelper(QObject *parent = nullptr); explicit WindowHelper(QObject *parent = nullptr);
Q_INVOKABLE void initWindow(FramelessView* window); Q_INVOKABLE QJsonObject initWindow(FramelessView* window);
Q_INVOKABLE void setTitle(const QString& text); Q_INVOKABLE void setTitle(const QString& text);
Q_INVOKABLE void setMinimumWidth(int width); Q_INVOKABLE void setMinimumWidth(int width);
Q_INVOKABLE void setMaximumWidth(int width); Q_INVOKABLE void setMaximumWidth(int width);
Q_INVOKABLE void setMinimumHeight(int height); Q_INVOKABLE void setMinimumHeight(int height);
Q_INVOKABLE void setMaximumHeight(int height); Q_INVOKABLE void setMaximumHeight(int height);
Q_INVOKABLE void updateWindow();
Q_INVOKABLE void setModality(int type);
private: private:
FramelessView* window; FramelessView* window;

View File

@ -7,7 +7,7 @@ TextField{
property var values:[] property var values:[]
property int fontStyle: FluText.Body property int fontStyle: FluText.Body
property int pixelSize : FluTheme.textSize property int pixelSize : FluTheme.textSize
property int iconSource: -1 property int iconSource: 0
signal itemClicked(string data) signal itemClicked(string data)
id:input id:input
@ -112,7 +112,7 @@ TextField{
iconSource: input.iconSource iconSource: input.iconSource
iconSize: 15 iconSize: 15
opacity: 0.5 opacity: 0.5
visible: input.iconSource != -1 visible: input.iconSource != 0
anchors{ anchors{
verticalCenter: parent.verticalCenter verticalCenter: parent.verticalCenter
right: parent.right right: parent.right

View File

@ -2,9 +2,9 @@
import QtQuick.Layouts 1.15 import QtQuick.Layouts 1.15
import QtQuick.Controls 2.15 import QtQuick.Controls 2.15
Popup { Menu {
id: popup id: popup
default property alias content: container.children default property alias content: container.data
background: Rectangle { background: Rectangle {
implicitWidth: 140 implicitWidth: 140

View File

@ -26,6 +26,9 @@ Item {
property int maximumWidth property int maximumWidth
property int minimumHeight property int minimumHeight
property int maximumHeight property int maximumHeight
property int modality:0
signal initArgument(var argument)
property int borderless:{ property int borderless:{
if(!FluTheme.isFrameless){ if(!FluTheme.isFrameless){
@ -76,8 +79,8 @@ Item {
target: FluApp target: FluApp
function onWindowReady(view){ function onWindowReady(view){
if(FluApp.equalsWindow(view,window)){ if(FluApp.equalsWindow(view,window)){
helper.initWindow(view); initArgument(helper.initWindow(view))
helper.setTitle(title); helper.setTitle(title)
if(minimumWidth){ if(minimumWidth){
helper.setMinimumWidth(minimumWidth) helper.setMinimumWidth(minimumWidth)
} }
@ -90,6 +93,8 @@ Item {
if(maximumHeight){ if(maximumHeight){
helper.setMaximumHeight(maximumHeight) helper.setMaximumHeight(maximumHeight)
} }
helper.setModality(root.modality);
helper.updateWindow()
} }
} }
} }
@ -119,4 +124,8 @@ Item {
window.close() window.close()
} }
function onResult(data){
}
} }