mirror of
https://github.com/zhuzichu520/FluentUI.git
synced 2025-07-01 15:42:20 +08:00
Compare commits
229 Commits
Author | SHA1 | Date | |
---|---|---|---|
bc0c36772f | |||
46148b3c5c | |||
b4f2f68135 | |||
5d4cfa5286 | |||
ee23554cb4 | |||
a9772a8fb0 | |||
2428a38194 | |||
1a21cd7b31 | |||
bcc47c1496 | |||
95a6be3d28 | |||
9a48880e84 | |||
4f60459166 | |||
29749a5761 | |||
1b3344e9f9 | |||
394d0ab244 | |||
6a925bdad3 | |||
6999067a80 | |||
1047fac4d6 | |||
3b2982a95e | |||
e37d47f629 | |||
d07383ba46 | |||
ce3da2e92f | |||
2e8be5f133 | |||
8662eb97aa | |||
55a77eba4b | |||
5dd3320f66 | |||
3b4c327528 | |||
412842d844 | |||
2242ffc367 | |||
d485ec9e3b | |||
05251e085c | |||
78f5dd0a61 | |||
2f3ed2bd0f | |||
35d85aa801 | |||
542ea0a7b9 | |||
b981ecca7d | |||
a7552e2b5c | |||
637a0f312e | |||
e3e4592ea4 | |||
71c238e62b | |||
77ae88f518 | |||
2f9090858b | |||
5d11064011 | |||
dfb80e70ee | |||
7618fe0f37 | |||
cbebb51d62 | |||
f0227c5686 | |||
24c8644d79 | |||
40ce63e1df | |||
cc4abbf79f | |||
35921ed900 | |||
661529f1f4 | |||
139c5c455d | |||
3460b59839 | |||
bdbd5d295e | |||
51637fceca | |||
7f542edba7 | |||
0b124ec9ee | |||
fa77ed6163 | |||
eef46a2dac | |||
f856fd44c1 | |||
35bfb8021f | |||
29012f0b68 | |||
54b98c8e05 | |||
20852ac6bf | |||
636dddaa84 | |||
50a6103584 | |||
a693db76c8 | |||
25e385c06e | |||
777459e35d | |||
9bdc6c45cd | |||
fc618e96c5 | |||
cac1864d65 | |||
9846415838 | |||
840ae7ec2f | |||
05f51c788e | |||
19a5883e76 | |||
da0184f70e | |||
ea79becd08 | |||
1e5c70c7b4 | |||
c6a43c41db | |||
5f6d66b6ce | |||
83f94630f1 | |||
ac63514451 | |||
4d197d2697 | |||
b78aaaad48 | |||
3784a86936 | |||
0ee0c8c68f | |||
ec2ddc24eb | |||
baf5438262 | |||
b452218e79 | |||
cb5b9d8541 | |||
4ec772fff2 | |||
8f9c529153 | |||
483c5f8e09 | |||
0402b07dba | |||
ee071ee451 | |||
487cbefd82 | |||
b836b25028 | |||
0eacc177d0 | |||
9b5167d92e | |||
3a775a8bb2 | |||
0030c44a6c | |||
83cd2873c6 | |||
f385e34d23 | |||
fc1b62d4a3 | |||
9985053f82 | |||
4b6fa1e65c | |||
f265753228 | |||
45b96faf7e | |||
473dec0990 | |||
939e04e4ca | |||
332c0ee54e | |||
d805147627 | |||
0ecab11e3c | |||
f0f2814d5e | |||
d71e474f40 | |||
aeca953d32 | |||
b1c0074a10 | |||
f2feb19d68 | |||
992d8c142c | |||
16da5f1633 | |||
1003b34139 | |||
a2e15fc3b0 | |||
fecbf48482 | |||
20d52ac49a | |||
e8a77613bc | |||
54f52e0886 | |||
79ab73105e | |||
2bd961ee77 | |||
17829bac69 | |||
1d68de9287 | |||
9e8e55cb73 | |||
29f363afdd | |||
ecced8abfb | |||
5a49ffb7e0 | |||
e631465231 | |||
50b1aaf8f5 | |||
93b55e7fea | |||
33fda1d025 | |||
a6e494d1c7 | |||
bfaff95fee | |||
f20bfc0466 | |||
69b371e807 | |||
b0545ffa2a | |||
91ba4d4792 | |||
3c7499c48b | |||
1b6743efeb | |||
68127a7303 | |||
895332f867 | |||
8127f7c3ed | |||
cbe26ce4cd | |||
c048336de1 | |||
d65d6fbbac | |||
674009e394 | |||
d8e3cf00b4 | |||
8e84ea1e3a | |||
5221c5bc63 | |||
a5b5a5b942 | |||
52c806eeff | |||
0e4d81c7c8 | |||
4a03ad4227 | |||
8e1e8a9db5 | |||
9354b8c0bf | |||
7723ac97fb | |||
5240f826c5 | |||
36da8cd785 | |||
7716ab02a6 | |||
7a1776407f | |||
f88b330f8e | |||
67ef7f13aa | |||
23ec52ce6a | |||
5b7fdab1d9 | |||
4c1a96c03e | |||
ab4090ea9b | |||
8fb2ef723e | |||
77d9b4bde9 | |||
a96191b2af | |||
28e1799ca4 | |||
8337e278ff | |||
7ad8c969da | |||
66ae37a023 | |||
b27a88d261 | |||
257f3a7b3d | |||
4710379324 | |||
8fc74fe43b | |||
be194e7624 | |||
e6d9de34ea | |||
c47fa5ebc7 | |||
af74f35e43 | |||
3b61985cfe | |||
eb96cf5b47 | |||
d48ad16ae3 | |||
39fb4d1b1a | |||
674de3f881 | |||
0c2b3173eb | |||
b2471bcf0d | |||
79a7c97fe8 | |||
fd30819393 | |||
05040ec4a9 | |||
0297445218 | |||
3990c95489 | |||
618b21854f | |||
ef40e3b109 | |||
f2b67af58a | |||
c0f15060af | |||
24f3cb1027 | |||
4b01fcf2b4 | |||
752fe8cfba | |||
e1292966c1 | |||
249c294926 | |||
573898149a | |||
c92d807ec1 | |||
531bffdf1a | |||
db47a75f6b | |||
ad79480345 | |||
ed5956d824 | |||
ddee70cdca | |||
d6bbe3a5ec | |||
d93d6b7c26 | |||
54be482833 | |||
f60eaec07c | |||
f7b7d30a6f | |||
ba32c92133 | |||
08c4f78454 | |||
e29150ca52 | |||
1be9103412 | |||
8583427a49 | |||
94a96cf75e |
@ -34,7 +34,7 @@ function(get_git_head_revision _refspecvar _hashvar)
|
|||||||
endif()
|
endif()
|
||||||
if(NOT "${GIT_DIR}" STREQUAL "")
|
if(NOT "${GIT_DIR}" STREQUAL "")
|
||||||
file(RELATIVE_PATH _relative_to_source_dir "${CMAKE_SOURCE_DIR}"
|
file(RELATIVE_PATH _relative_to_source_dir "${CMAKE_SOURCE_DIR}"
|
||||||
"${GIT_DIR}")
|
"${GIT_DIR}")
|
||||||
if("${_relative_to_source_dir}" MATCHES "[.][.]" AND NOT ALLOW_LOOKING_ABOVE_CMAKE_SOURCE_DIR)
|
if("${_relative_to_source_dir}" MATCHES "[.][.]" AND NOT ALLOW_LOOKING_ABOVE_CMAKE_SOURCE_DIR)
|
||||||
set(GIT_DIR "")
|
set(GIT_DIR "")
|
||||||
endif()
|
endif()
|
||||||
@ -52,23 +52,23 @@ function(get_git_head_revision _refspecvar _hashvar)
|
|||||||
if(NOT IS_DIRECTORY ${GIT_DIR})
|
if(NOT IS_DIRECTORY ${GIT_DIR})
|
||||||
execute_process(
|
execute_process(
|
||||||
COMMAND "${GIT_EXECUTABLE}" rev-parse
|
COMMAND "${GIT_EXECUTABLE}" rev-parse
|
||||||
--show-superproject-working-tree
|
--show-superproject-working-tree
|
||||||
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
|
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
|
||||||
OUTPUT_VARIABLE out
|
OUTPUT_VARIABLE out
|
||||||
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
|
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
if(NOT "${out}" STREQUAL "")
|
if(NOT "${out}" STREQUAL "")
|
||||||
file(READ ${GIT_DIR} submodule)
|
file(READ ${GIT_DIR} submodule)
|
||||||
string(REGEX REPLACE "gitdir: (.*)$" "\\1" GIT_DIR_RELATIVE
|
string(REGEX REPLACE "gitdir: (.*)$" "\\1" GIT_DIR_RELATIVE
|
||||||
${submodule})
|
${submodule})
|
||||||
string(STRIP ${GIT_DIR_RELATIVE} GIT_DIR_RELATIVE)
|
string(STRIP ${GIT_DIR_RELATIVE} GIT_DIR_RELATIVE)
|
||||||
get_filename_component(SUBMODULE_DIR ${GIT_DIR} PATH)
|
get_filename_component(SUBMODULE_DIR ${GIT_DIR} PATH)
|
||||||
get_filename_component(GIT_DIR ${SUBMODULE_DIR}/${GIT_DIR_RELATIVE}
|
get_filename_component(GIT_DIR ${SUBMODULE_DIR}/${GIT_DIR_RELATIVE}
|
||||||
ABSOLUTE)
|
ABSOLUTE)
|
||||||
set(HEAD_SOURCE_FILE "${GIT_DIR}/HEAD")
|
set(HEAD_SOURCE_FILE "${GIT_DIR}/HEAD")
|
||||||
else()
|
else()
|
||||||
file(READ ${GIT_DIR} worktree_ref)
|
file(READ ${GIT_DIR} worktree_ref)
|
||||||
string(REGEX REPLACE "gitdir: (.*)$" "\\1" git_worktree_dir
|
string(REGEX REPLACE "gitdir: (.*)$" "\\1" git_worktree_dir
|
||||||
${worktree_ref})
|
${worktree_ref})
|
||||||
string(STRIP ${git_worktree_dir} git_worktree_dir)
|
string(STRIP ${git_worktree_dir} git_worktree_dir)
|
||||||
_git_find_closest_git_dir("${git_worktree_dir}" GIT_DIR)
|
_git_find_closest_git_dir("${git_worktree_dir}" GIT_DIR)
|
||||||
set(HEAD_SOURCE_FILE "${git_worktree_dir}/HEAD")
|
set(HEAD_SOURCE_FILE "${git_worktree_dir}/HEAD")
|
||||||
@ -88,7 +88,7 @@ function(get_git_head_revision _refspecvar _hashvar)
|
|||||||
configure_file("${HEAD_SOURCE_FILE}" "${HEAD_FILE}" COPYONLY)
|
configure_file("${HEAD_SOURCE_FILE}" "${HEAD_FILE}" COPYONLY)
|
||||||
|
|
||||||
configure_file("${_gitdescmoddir}/GetGitRevisionDescription.cmake.in"
|
configure_file("${_gitdescmoddir}/GetGitRevisionDescription.cmake.in"
|
||||||
"${GIT_DATA}/grabRef.cmake" @ONLY)
|
"${GIT_DATA}/grabRef.cmake" @ONLY)
|
||||||
include("${GIT_DATA}/grabRef.cmake")
|
include("${GIT_DATA}/grabRef.cmake")
|
||||||
|
|
||||||
set(${_refspecvar}
|
set(${_refspecvar}
|
||||||
@ -299,12 +299,12 @@ git_describe(GIT_DESCRIBE)
|
|||||||
git_commit_counts(GIT_COMMIT_COUNT)
|
git_commit_counts(GIT_COMMIT_COUNT)
|
||||||
_git_find_closest_git_dir("${CMAKE_CURRENT_SOURCE_DIR}" GIT_DIR)
|
_git_find_closest_git_dir("${CMAKE_CURRENT_SOURCE_DIR}" GIT_DIR)
|
||||||
if(NOT IS_DIRECTORY ${GIT_DIR})
|
if(NOT IS_DIRECTORY ${GIT_DIR})
|
||||||
message(STATUS "Current .git not exist")
|
message(STATUS "Current .git not exist")
|
||||||
set(GIT_COMMIT_COUNT "1")
|
set(GIT_COMMIT_COUNT "1")
|
||||||
set(GIT_DESCRIBE "1.0.0")
|
set(GIT_DESCRIBE "1.0.0")
|
||||||
set(GIT_TAG "1.0.0")
|
set(GIT_TAG "1.0.0")
|
||||||
else()
|
else()
|
||||||
message(STATUS "Current .git exist")
|
message(STATUS "Current .git exist")
|
||||||
endif()
|
endif()
|
||||||
string(REPLACE "." "," GIT_TAG_WITH_COMMA ${GIT_TAG})
|
string(REPLACE "." "," GIT_TAG_WITH_COMMA ${GIT_TAG})
|
||||||
string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+" GIT_SEMVER "${GIT_TAG}")
|
string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+" GIT_SEMVER "${GIT_TAG}")
|
||||||
|
@ -1,43 +1,21 @@
|
|||||||
#
|
|
||||||
# Internal file for GetGitRevisionDescription.cmake
|
|
||||||
#
|
|
||||||
# Requires CMake 2.6 or newer (uses the 'function' command)
|
|
||||||
#
|
|
||||||
# Original Author:
|
|
||||||
# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
|
|
||||||
# http://academic.cleardefinition.com
|
|
||||||
# Iowa State University HCI Graduate Program/VRAC
|
|
||||||
#
|
|
||||||
# Copyright 2009-2012, Iowa State University
|
|
||||||
# Copyright 2011-2015, Contributors
|
|
||||||
# Distributed under the Boost Software License, Version 1.0.
|
|
||||||
# (See accompanying file LICENSE_1_0.txt or copy at
|
|
||||||
# http://www.boost.org/LICENSE_1_0.txt)
|
|
||||||
# SPDX-License-Identifier: BSL-1.0
|
|
||||||
|
|
||||||
set(HEAD_HASH)
|
set(HEAD_HASH)
|
||||||
|
|
||||||
file(READ "@HEAD_FILE@" HEAD_CONTENTS LIMIT 1024)
|
file(READ "@HEAD_FILE@" HEAD_CONTENTS LIMIT 1024)
|
||||||
|
|
||||||
string(STRIP "${HEAD_CONTENTS}" HEAD_CONTENTS)
|
string(STRIP "${HEAD_CONTENTS}" HEAD_CONTENTS)
|
||||||
if(HEAD_CONTENTS MATCHES "ref")
|
if(HEAD_CONTENTS MATCHES "ref")
|
||||||
# named branch
|
string(REPLACE "ref: " "" HEAD_REF "${HEAD_CONTENTS}")
|
||||||
string(REPLACE "ref: " "" HEAD_REF "${HEAD_CONTENTS}")
|
if(EXISTS "@GIT_DIR@/${HEAD_REF}")
|
||||||
if(EXISTS "@GIT_DIR@/${HEAD_REF}")
|
configure_file("@GIT_DIR@/${HEAD_REF}" "@GIT_DATA@/head-ref" COPYONLY)
|
||||||
configure_file("@GIT_DIR@/${HEAD_REF}" "@GIT_DATA@/head-ref" COPYONLY)
|
else()
|
||||||
else()
|
configure_file("@GIT_DIR@/packed-refs" "@GIT_DATA@/packed-refs" COPYONLY)
|
||||||
configure_file("@GIT_DIR@/packed-refs" "@GIT_DATA@/packed-refs" COPYONLY)
|
file(READ "@GIT_DATA@/packed-refs" PACKED_REFS)
|
||||||
file(READ "@GIT_DATA@/packed-refs" PACKED_REFS)
|
if(${PACKED_REFS} MATCHES "([0-9a-z]*) ${HEAD_REF}")
|
||||||
if(${PACKED_REFS} MATCHES "([0-9a-z]*) ${HEAD_REF}")
|
set(HEAD_HASH "${CMAKE_MATCH_1}")
|
||||||
set(HEAD_HASH "${CMAKE_MATCH_1}")
|
endif()
|
||||||
endif()
|
endif()
|
||||||
endif()
|
|
||||||
else()
|
else()
|
||||||
# detached HEAD
|
configure_file("@GIT_DIR@/HEAD" "@GIT_DATA@/head-ref" COPYONLY)
|
||||||
configure_file("@GIT_DIR@/HEAD" "@GIT_DATA@/head-ref" COPYONLY)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(NOT HEAD_HASH)
|
if(NOT HEAD_HASH)
|
||||||
file(READ "@GIT_DATA@/head-ref" HEAD_HASH LIMIT 1024)
|
file(READ "@GIT_DATA@/head-ref" HEAD_HASH LIMIT 1024)
|
||||||
string(STRIP "${HEAD_HASH}" HEAD_HASH)
|
string(STRIP "${HEAD_HASH}" HEAD_HASH)
|
||||||
endif()
|
endif()
|
||||||
|
51
.cmake/InstallerScript.iss.in
Normal file
51
.cmake/InstallerScript.iss.in
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
; Script generated by the Inno Setup Script Wizard.
|
||||||
|
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
|
||||||
|
|
||||||
|
#define MyAppName "example"
|
||||||
|
#define MyAppVersion "${GIT_SEMVER}"
|
||||||
|
#define MyAppPublisher "ZhuZiChu"
|
||||||
|
#define MyAppURL "https://zhuzichu520.github.io/"
|
||||||
|
#define MyAppExeName "example.exe"
|
||||||
|
#define MyAppFileDir "dist"
|
||||||
|
|
||||||
|
[Setup]
|
||||||
|
; NOTE: The value of AppId uniquely identifies this application. Do not use the same AppId value in installers for other applications.
|
||||||
|
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
|
||||||
|
AppId={{A053D1AE-AEA9-4105-A79B-B5F5BEDC9208}
|
||||||
|
AppName={#MyAppName}
|
||||||
|
AppVersion={#MyAppVersion}
|
||||||
|
;AppVerName={#MyAppName} {#MyAppVersion}
|
||||||
|
AppPublisher={#MyAppPublisher}
|
||||||
|
AppPublisherURL={#MyAppURL}
|
||||||
|
AppSupportURL={#MyAppURL}
|
||||||
|
AppUpdatesURL={#MyAppURL}
|
||||||
|
DefaultDirName={autopf}\{#MyAppName}
|
||||||
|
DisableProgramGroupPage=yes
|
||||||
|
; Uncomment the following line to run in non administrative install mode (install for current user only.)
|
||||||
|
;PrivilegesRequired=lowest
|
||||||
|
OutputDir=.\
|
||||||
|
OutputBaseFilename=installer
|
||||||
|
Compression=lzma
|
||||||
|
SolidCompression=yes
|
||||||
|
WizardStyle=modern
|
||||||
|
UninstallDisplayIcon={app}\{#MyAppExeName}
|
||||||
|
SetupIconFile=.\..\favicon.ico
|
||||||
|
|
||||||
|
[Languages]
|
||||||
|
Name: "chinesesimplified"; MessagesFile: "compiler:Languages\ChineseSimplified.isl"
|
||||||
|
|
||||||
|
[Tasks]
|
||||||
|
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: checkablealone
|
||||||
|
|
||||||
|
[Files]
|
||||||
|
Source: ".\..\{#MyAppFileDir}\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion
|
||||||
|
Source: ".\..\{#MyAppFileDir}\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
|
||||||
|
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
|
||||||
|
|
||||||
|
[Icons]
|
||||||
|
Name: "{autoprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
|
||||||
|
Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
|
||||||
|
|
||||||
|
[Run]
|
||||||
|
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent
|
||||||
|
|
@ -1,5 +1,6 @@
|
|||||||
include(CMakeParseArguments)
|
include(CMakeParseArguments)
|
||||||
find_package(Qt5 REQUIRED COMPONENTS Core)
|
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core)
|
||||||
|
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core)
|
||||||
|
|
||||||
function(FindQmlPluginDump)
|
function(FindQmlPluginDump)
|
||||||
get_target_property (QT_QMAKE_EXECUTABLE Qt5::qmake IMPORTED_LOCATION)
|
get_target_property (QT_QMAKE_EXECUTABLE Qt5::qmake IMPORTED_LOCATION)
|
||||||
@ -35,7 +36,6 @@ function(add_qmlplugin TARGET)
|
|||||||
${QMLPLUGIN_SOURCES}
|
${QMLPLUGIN_SOURCES}
|
||||||
)
|
)
|
||||||
set(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/lib)
|
set(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/lib)
|
||||||
add_custom_target("${TARGET}-qmlfiles" SOURCES ${QMLPLUGIN_QMLFILES})
|
|
||||||
|
|
||||||
if(QMLPLUGIN_NO_AUTORCC)
|
if(QMLPLUGIN_NO_AUTORCC)
|
||||||
set_target_properties(${TARGET} PROPERTIES AUTOMOC OFF)
|
set_target_properties(${TARGET} PROPERTIES AUTOMOC OFF)
|
||||||
@ -58,8 +58,8 @@ if (${QMLPLUGIN_LIBTYPE} MATCHES "SHARED")
|
|||||||
set(INSTALL_QMLDIR_COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_LIST_DIR}/Qt5/${QMLPLUGIN_QMLDIR}/qmldir ${QMLPLUGIN_BINARY_DIR}/qmldir)
|
set(INSTALL_QMLDIR_COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_LIST_DIR}/Qt5/${QMLPLUGIN_QMLDIR}/qmldir ${QMLPLUGIN_BINARY_DIR}/qmldir)
|
||||||
set(COPY_QMLTYPES_COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_LIST_DIR}/Qt5/${QMLPLUGIN_QMLDIR}/plugins.qmltypes $<TARGET_FILE_DIR:${TARGET}>/${QMLPLUGIN_URI}/plugins.qmltypes)
|
set(COPY_QMLTYPES_COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_LIST_DIR}/Qt5/${QMLPLUGIN_QMLDIR}/plugins.qmltypes $<TARGET_FILE_DIR:${TARGET}>/${QMLPLUGIN_URI}/plugins.qmltypes)
|
||||||
set(INSTALL_QMLTYPES_COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_LIST_DIR}/Qt5/${QMLPLUGIN_QMLDIR}/plugins.qmltypes ${QMLPLUGIN_BINARY_DIR}/plugins.qmltypes)
|
set(INSTALL_QMLTYPES_COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_LIST_DIR}/Qt5/${QMLPLUGIN_QMLDIR}/plugins.qmltypes ${QMLPLUGIN_BINARY_DIR}/plugins.qmltypes)
|
||||||
set(COPY_LIBRARY_COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/$<TARGET_FILE_NAME:${TARGET}> $<TARGET_FILE_DIR:${TARGET}>/${QMLPLUGIN_URI})
|
set(COPY_LIBRARY_COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE_DIR:${TARGET}>/$<TARGET_FILE_NAME:${TARGET}> $<TARGET_FILE_DIR:${TARGET}>/${QMLPLUGIN_URI})
|
||||||
set(INSTALL_LIBRARY_COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/$<TARGET_FILE_NAME:${TARGET}> ${QMLPLUGIN_BINARY_DIR})
|
set(INSTALL_LIBRARY_COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE_DIR:${TARGET}>/$<TARGET_FILE_NAME:${TARGET}> ${QMLPLUGIN_BINARY_DIR})
|
||||||
if(QMLPLUGIN_QMLDIR)
|
if(QMLPLUGIN_QMLDIR)
|
||||||
set(COPY_QMLFILES_COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_LIST_DIR}/Qt5/${QMLPLUGIN_QMLDIR} $<TARGET_FILE_DIR:${TARGET}>/${QMLPLUGIN_URI})
|
set(COPY_QMLFILES_COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_LIST_DIR}/Qt5/${QMLPLUGIN_QMLDIR} $<TARGET_FILE_DIR:${TARGET}>/${QMLPLUGIN_URI})
|
||||||
else()
|
else()
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
// 应用程序版本信息
|
|
||||||
// 请勿修改此头文件,因为这个文件是自动生成的
|
|
||||||
#ifndef VERSION_H
|
#ifndef VERSION_H
|
||||||
#define VERSION_H
|
#define VERSION_H
|
||||||
|
|
||||||
|
@ -31,4 +31,4 @@ BEGIN
|
|||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
IDI_ICON1 ICON DISCARDABLE "${CMAKE_SOURCE_DIR}/example/favicon.ico"
|
IDI_ICON1 ICON DISCARDABLE "${FLUENTUI_DIRECTORY}/example/favicon.ico"
|
||||||
|
12
.github/workflows/macos.yml
vendored
12
.github/workflows/macos.yml
vendored
@ -21,8 +21,8 @@ jobs:
|
|||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
os: [macos-12]
|
os: [macos-13]
|
||||||
qt_ver: [6.5.0]
|
qt_ver: [6.6.0]
|
||||||
qt_arch: [clang_64]
|
qt_arch: [clang_64]
|
||||||
env:
|
env:
|
||||||
targetName: example
|
targetName: example
|
||||||
@ -38,7 +38,7 @@ jobs:
|
|||||||
version: ${{ matrix.qt_ver }}
|
version: ${{ matrix.qt_ver }}
|
||||||
cache: ${{steps.cache-qt.outputs.cache-hit}}
|
cache: ${{steps.cache-qt.outputs.cache-hit}}
|
||||||
arch: ${{ matrix.qt_arch }}
|
arch: ${{ matrix.qt_arch }}
|
||||||
modules: 'qt5compat qtmultimedia qtshadertools qtimageformats'
|
modules: 'qt5compat qtmultimedia qtshadertools qtimageformats qt3d'
|
||||||
|
|
||||||
- name: Set up Ninja
|
- name: Set up Ninja
|
||||||
uses: seanmiddleditch/gha-setup-ninja@v3
|
uses: seanmiddleditch/gha-setup-ninja@v3
|
||||||
@ -50,17 +50,17 @@ jobs:
|
|||||||
cmake --version
|
cmake --version
|
||||||
mkdir build
|
mkdir build
|
||||||
cd build
|
cd build
|
||||||
cmake -DCMAKE_MESSAGE_LOG_LEVEL=STATUS -DCMAKE_PREFIX_PATH=/Users/runner/work/FluentUI/Qt/6.5.0/macos -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_BUILD_TYPE=Release -GNinja ..
|
cmake -DCMAKE_MESSAGE_LOG_LEVEL=STATUS -DCMAKE_PREFIX_PATH=/Users/runner/work/FluentUI/Qt/6.6.0/macos -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_BUILD_TYPE=Release -GNinja ..
|
||||||
cmake --build . --target all --config Release --parallel
|
cmake --build . --target all --config Release --parallel
|
||||||
|
|
||||||
- name: package
|
- name: package
|
||||||
run: |
|
run: |
|
||||||
# 拷贝依赖
|
# 拷贝依赖
|
||||||
macdeployqt bin/release/${targetName}.app -qmldir=. -verbose=1 -dmg
|
sudo macdeployqt bin/release/${targetName}.app -qmldir=. -dmg
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v2
|
- uses: actions/upload-artifact@v2
|
||||||
with:
|
with:
|
||||||
name: ${{ env.targetName }}_${{ matrix.os }}_${{matrix.qt_ver}}.zip
|
name: ${{ env.targetName }}_${{ matrix.os }}_${{matrix.qt_ver}}
|
||||||
path: bin/release/${{ env.targetName }}.app
|
path: bin/release/${{ env.targetName }}.app
|
||||||
|
|
||||||
- name: uploadRelease
|
- name: uploadRelease
|
||||||
|
6
.github/workflows/ubuntu.yml
vendored
6
.github/workflows/ubuntu.yml
vendored
@ -23,7 +23,7 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
os: [ubuntu-20.04]
|
os: [ubuntu-20.04]
|
||||||
qt_ver: [6.5.0]
|
qt_ver: [6.6.0]
|
||||||
qt_arch: [gcc_64]
|
qt_arch: [gcc_64]
|
||||||
env:
|
env:
|
||||||
targetName: example
|
targetName: example
|
||||||
@ -39,7 +39,7 @@ jobs:
|
|||||||
version: ${{ matrix.qt_ver }}
|
version: ${{ matrix.qt_ver }}
|
||||||
cache: ${{steps.cache-qt.outputs.cache-hit}}
|
cache: ${{steps.cache-qt.outputs.cache-hit}}
|
||||||
arch: ${{ matrix.qt_arch }}
|
arch: ${{ matrix.qt_arch }}
|
||||||
modules: 'qt5compat qtmultimedia qtshadertools qtimageformats'
|
modules: 'qt5compat qtmultimedia qtshadertools qtimageformats qt3d'
|
||||||
|
|
||||||
- name: Set up Ninja
|
- name: Set up Ninja
|
||||||
uses: seanmiddleditch/gha-setup-ninja@v3
|
uses: seanmiddleditch/gha-setup-ninja@v3
|
||||||
@ -55,7 +55,7 @@ jobs:
|
|||||||
cmake --version
|
cmake --version
|
||||||
mkdir build
|
mkdir build
|
||||||
cd build
|
cd build
|
||||||
cmake -DCMAKE_MESSAGE_LOG_LEVEL=STATUS -DCMAKE_PREFIX_PATH=/home/runner/work/FluentUI/Qt/6.5.0/gcc_64 -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -DCMAKE_BUILD_TYPE=Release -GNinja ..
|
cmake -DCMAKE_MESSAGE_LOG_LEVEL=STATUS -DCMAKE_PREFIX_PATH=/home/runner/work/FluentUI/Qt/6.6.0/gcc_64 -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -DCMAKE_BUILD_TYPE=Release -GNinja ..
|
||||||
cmake --build . --target all --config Release --parallel
|
cmake --build . --target all --config Release --parallel
|
||||||
|
|
||||||
- name: install QT linux deploy
|
- name: install QT linux deploy
|
||||||
|
29
.github/workflows/windows-mingw.yml
vendored
29
.github/workflows/windows-mingw.yml
vendored
@ -18,12 +18,13 @@ on:
|
|||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
name: Build
|
name: Build
|
||||||
runs-on: windows-2022
|
runs-on: ${{ matrix.os }}
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
|
os: [windows-2022]
|
||||||
include:
|
include:
|
||||||
- qt_arch: win64_mingw
|
- qt_arch: win64_mingw
|
||||||
qt_ver: 6.5.0
|
qt_ver: 6.6.0
|
||||||
qt_tools: "tools_mingw,9.0.0-1-202203221220,qt.tools.win64_mingw900"
|
qt_tools: "tools_mingw,9.0.0-1-202203221220,qt.tools.win64_mingw900"
|
||||||
qt_tools_mingw_install: mingw900_64
|
qt_tools_mingw_install: mingw900_64
|
||||||
env:
|
env:
|
||||||
@ -34,6 +35,11 @@ jobs:
|
|||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
|
|
||||||
|
- name: Setup ninja
|
||||||
|
uses: seanmiddleditch/gha-setup-ninja@master
|
||||||
|
with:
|
||||||
|
version: 1.10.2
|
||||||
|
|
||||||
- name: Install Qt
|
- name: Install Qt
|
||||||
uses: jurplel/install-qt-action@v3
|
uses: jurplel/install-qt-action@v3
|
||||||
@ -41,7 +47,7 @@ jobs:
|
|||||||
version: ${{ matrix.qt_ver }}
|
version: ${{ matrix.qt_ver }}
|
||||||
arch: ${{ matrix.qt_arch }}
|
arch: ${{ matrix.qt_arch }}
|
||||||
cache: ${{steps.cache-qt.outputs.cache-hit}}
|
cache: ${{steps.cache-qt.outputs.cache-hit}}
|
||||||
modules: 'qt5compat qtmultimedia qtshadertools qtimageformats'
|
modules: 'qt5compat qtmultimedia qtshadertools qtimageformats qt3d'
|
||||||
|
|
||||||
- name: Qt6 environment configuration
|
- name: Qt6 environment configuration
|
||||||
if: ${{ startsWith( matrix.qt_ver, 6 ) }}
|
if: ${{ startsWith( matrix.qt_ver, 6 ) }}
|
||||||
@ -62,7 +68,8 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
mkdir build
|
mkdir build
|
||||||
cd build
|
cd build
|
||||||
cmake -DCMAKE_MESSAGE_LOG_LEVEL=STATUS -DCMAKE_PREFIX_PATH=D:\a\FluentUI\Qt\6.5.0\mingw_64 -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -DCMAKE_BUILD_TYPE=Release -GNinja ..
|
ninja --version
|
||||||
|
cmake -DCMAKE_MESSAGE_LOG_LEVEL=STATUS -DCMAKE_PREFIX_PATH=D:\a\FluentUI\Qt\6.6.0\mingw_64 -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -DCMAKE_BUILD_TYPE=Release -GNinja ..
|
||||||
cmake --build . --target all --config Release --parallel
|
cmake --build . --target all --config Release --parallel
|
||||||
|
|
||||||
- name: package
|
- name: package
|
||||||
@ -78,14 +85,20 @@ jobs:
|
|||||||
- uses: actions/upload-artifact@v2
|
- uses: actions/upload-artifact@v2
|
||||||
with:
|
with:
|
||||||
name: ${{ steps.package.outputs.packageName }}
|
name: ${{ steps.package.outputs.packageName }}
|
||||||
path: ${{ steps.package.outputs.packageName }}
|
path: dist
|
||||||
|
|
||||||
|
- name: inno setup install
|
||||||
|
if: startsWith(github.event.ref, 'refs/tags/')
|
||||||
|
uses: zhuzichu520/inno-setup-action@v1.0.1
|
||||||
|
with:
|
||||||
|
filepath: ./action-cli/InstallerScript.iss
|
||||||
|
|
||||||
- name: uploadRelease
|
- name: uploadRelease
|
||||||
if: startsWith(github.event.ref, 'refs/tags/')
|
if: startsWith(github.event.ref, 'refs/tags/')
|
||||||
uses: svenstaro/upload-release-action@v2
|
uses: svenstaro/upload-release-action@v2
|
||||||
with:
|
with:
|
||||||
repo_token: ${{ secrets.GITHUB_TOKEN }}
|
repo_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
file: ${{ steps.package.outputs.packageName }}.zip
|
file: ./action-cli/installer.exe
|
||||||
asset_name: ${{ env.fileName }}_${{ github.ref_name }}_${{ matrix.qt_arch }}_Qt${{ matrix.qt_ver }}.zip
|
asset_name: ${{ env.fileName }}_${{ github.ref_name }}_${{ matrix.qt_arch }}_Qt${{ matrix.qt_ver }}.exe
|
||||||
tag: ${{ github.ref }}
|
tag: ${{ github.ref }}
|
||||||
overwrite: true
|
overwrite: true
|
91
.github/workflows/windows-qt5.yml
vendored
Normal file
91
.github/workflows/windows-qt5.yml
vendored
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
name: Windows Qt5.15.2
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
paths:
|
||||||
|
- '*.txt'
|
||||||
|
- 'src/**'
|
||||||
|
- 'example/**'
|
||||||
|
- 'scripts/**'
|
||||||
|
- '.github/workflows/windows-qt5.yml'
|
||||||
|
pull_request:
|
||||||
|
paths:
|
||||||
|
- '*.txt'
|
||||||
|
- 'example/**'
|
||||||
|
- 'src/**'
|
||||||
|
- 'scripts/**'
|
||||||
|
- '.github/workflows/windows-qt5.yml'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
name: Build
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
os: [windows-2019]
|
||||||
|
include:
|
||||||
|
- qt_ver: 5.15.2
|
||||||
|
qt_arch: win32_msvc2019
|
||||||
|
msvc_arch: x86
|
||||||
|
qt_arch_install: msvc2019
|
||||||
|
env:
|
||||||
|
targetName: example.exe
|
||||||
|
fileName: example
|
||||||
|
steps:
|
||||||
|
- name: Check out repository
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
submodules: recursive
|
||||||
|
|
||||||
|
- name: Install Qt
|
||||||
|
uses: jurplel/install-qt-action@v3
|
||||||
|
with:
|
||||||
|
version: ${{ matrix.qt_ver }}
|
||||||
|
arch: ${{ matrix.qt_arch }}
|
||||||
|
cache: ${{steps.cache-qt.outputs.cache-hit}}
|
||||||
|
|
||||||
|
- name: msvc-build
|
||||||
|
id: build
|
||||||
|
shell: cmd
|
||||||
|
run: |
|
||||||
|
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" ${{ matrix.msvc_arch }}
|
||||||
|
mkdir build
|
||||||
|
cd build
|
||||||
|
cmake -DCMAKE_MESSAGE_LOG_LEVEL=STATUS -DCMAKE_PREFIX_PATH=D:\a\FluentUI\Qt\5.15.2\msvc2019 -DCMAKE_C_COMPILER=cl -DCMAKE_CXX_COMPILER=cl -DCMAKE_BUILD_TYPE=Release -GNinja ..
|
||||||
|
cmake --build . --target all --config Release --parallel
|
||||||
|
echo winSdkDir=%WindowsSdkDir% >> %GITHUB_ENV%
|
||||||
|
echo winSdkVer=%WindowsSdkVersion% >> %GITHUB_ENV%
|
||||||
|
echo vcToolsInstallDir=%VCToolsInstallDir% >> %GITHUB_ENV%
|
||||||
|
echo vcToolsRedistDir=%VCToolsRedistDir% >> %GITHUB_ENV%
|
||||||
|
|
||||||
|
- name: package
|
||||||
|
id: package
|
||||||
|
env:
|
||||||
|
archiveName: ${{ env.fileName }}-${{ matrix.qt_arch }}-${{ matrix.qt_ver }}
|
||||||
|
msvcArch: ${{ matrix.msvc_arch }}
|
||||||
|
shell: pwsh
|
||||||
|
run: |
|
||||||
|
& scripts\windows-publish.ps1 ${env:archiveName} ${env:targetName}
|
||||||
|
# 记录packageName给后续step
|
||||||
|
$name = ${env:archiveName}
|
||||||
|
echo "::set-output name=packageName::$name"
|
||||||
|
|
||||||
|
- uses: actions/upload-artifact@v2
|
||||||
|
with:
|
||||||
|
name: ${{ steps.package.outputs.packageName }}
|
||||||
|
path: dist
|
||||||
|
|
||||||
|
- name: inno setup install
|
||||||
|
if: startsWith(github.event.ref, 'refs/tags/')
|
||||||
|
uses: zhuzichu520/inno-setup-action@v1.0.1
|
||||||
|
with:
|
||||||
|
filepath: ./action-cli/InstallerScript.iss
|
||||||
|
|
||||||
|
- name: uploadRelease
|
||||||
|
if: startsWith(github.event.ref, 'refs/tags/')
|
||||||
|
uses: svenstaro/upload-release-action@v2
|
||||||
|
with:
|
||||||
|
repo_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
file: ./action-cli/installer.exe
|
||||||
|
asset_name: ${{ env.fileName }}_${{ github.ref_name }}_${{ matrix.qt_arch }}_Qt${{ matrix.qt_ver }}.exe
|
||||||
|
tag: ${{ github.ref }}
|
||||||
|
overwrite: true
|
21
.github/workflows/windows.yml
vendored
21
.github/workflows/windows.yml
vendored
@ -23,10 +23,10 @@ jobs:
|
|||||||
matrix:
|
matrix:
|
||||||
os: [windows-2019]
|
os: [windows-2019]
|
||||||
include:
|
include:
|
||||||
- qt_ver: 6.5.0
|
- qt_ver: 6.6.0
|
||||||
qt_arch: win64_msvc2019_64
|
qt_arch: win64_msvc2019_64
|
||||||
msvc_arch: x64
|
msvc_arch: x64
|
||||||
qt_arch_install: msvc2019_64
|
qt_arch_install: msvc2019_64
|
||||||
env:
|
env:
|
||||||
targetName: example.exe
|
targetName: example.exe
|
||||||
fileName: example
|
fileName: example
|
||||||
@ -42,16 +42,17 @@ jobs:
|
|||||||
version: ${{ matrix.qt_ver }}
|
version: ${{ matrix.qt_ver }}
|
||||||
arch: ${{ matrix.qt_arch }}
|
arch: ${{ matrix.qt_arch }}
|
||||||
cache: ${{steps.cache-qt.outputs.cache-hit}}
|
cache: ${{steps.cache-qt.outputs.cache-hit}}
|
||||||
modules: 'qt5compat qtmultimedia qtshadertools qtimageformats qtspeech'
|
modules: 'qt5compat qtmultimedia qtshadertools qtimageformats qtspeech qt3d'
|
||||||
|
|
||||||
- name: msvc-build
|
- name: msvc-build
|
||||||
id: build
|
id: build
|
||||||
shell: cmd
|
shell: cmd
|
||||||
run: |
|
run: |
|
||||||
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" ${{ matrix.msvc_arch }}
|
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" ${{ matrix.msvc_arch }}
|
||||||
|
ninja --version
|
||||||
mkdir build
|
mkdir build
|
||||||
cd build
|
cd build
|
||||||
cmake -DCMAKE_MESSAGE_LOG_LEVEL=STATUS -DCMAKE_PREFIX_PATH=D:\a\FluentUI\Qt\6.5.0\msvc2019_64 -DCMAKE_C_COMPILER=cl -DCMAKE_CXX_COMPILER=cl -DCMAKE_BUILD_TYPE=Release -GNinja ..
|
cmake -DCMAKE_MESSAGE_LOG_LEVEL=STATUS -DCMAKE_PREFIX_PATH=D:\a\FluentUI\Qt\6.6.0\msvc2019_64 -DCMAKE_C_COMPILER=cl -DCMAKE_CXX_COMPILER=cl -DCMAKE_BUILD_TYPE=Release -GNinja ..
|
||||||
cmake --build . --target all --config Release --parallel
|
cmake --build . --target all --config Release --parallel
|
||||||
echo winSdkDir=%WindowsSdkDir% >> %GITHUB_ENV%
|
echo winSdkDir=%WindowsSdkDir% >> %GITHUB_ENV%
|
||||||
echo winSdkVer=%WindowsSdkVersion% >> %GITHUB_ENV%
|
echo winSdkVer=%WindowsSdkVersion% >> %GITHUB_ENV%
|
||||||
@ -73,14 +74,20 @@ jobs:
|
|||||||
- uses: actions/upload-artifact@v2
|
- uses: actions/upload-artifact@v2
|
||||||
with:
|
with:
|
||||||
name: ${{ steps.package.outputs.packageName }}
|
name: ${{ steps.package.outputs.packageName }}
|
||||||
path: ${{ steps.package.outputs.packageName }}
|
path: dist
|
||||||
|
|
||||||
|
- name: inno setup install
|
||||||
|
if: startsWith(github.event.ref, 'refs/tags/')
|
||||||
|
uses: zhuzichu520/inno-setup-action@v1.0.1
|
||||||
|
with:
|
||||||
|
filepath: ./action-cli/InstallerScript.iss
|
||||||
|
|
||||||
- name: uploadRelease
|
- name: uploadRelease
|
||||||
if: startsWith(github.event.ref, 'refs/tags/')
|
if: startsWith(github.event.ref, 'refs/tags/')
|
||||||
uses: svenstaro/upload-release-action@v2
|
uses: svenstaro/upload-release-action@v2
|
||||||
with:
|
with:
|
||||||
repo_token: ${{ secrets.GITHUB_TOKEN }}
|
repo_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
file: ${{ steps.package.outputs.packageName }}.zip
|
file: ./action-cli/installer.exe
|
||||||
asset_name: ${{ env.fileName }}_${{ github.ref_name }}_${{ matrix.qt_arch }}_Qt${{ matrix.qt_ver }}.zip
|
asset_name: ${{ env.fileName }}_${{ github.ref_name }}_${{ matrix.qt_arch }}_Qt${{ matrix.qt_ver }}.exe
|
||||||
tag: ${{ github.ref }}
|
tag: ${{ github.ref }}
|
||||||
overwrite: true
|
overwrite: true
|
5
.gitignore
vendored
5
.gitignore
vendored
@ -37,4 +37,7 @@ build
|
|||||||
cmake-build-*
|
cmake-build-*
|
||||||
.idea
|
.idea
|
||||||
|
|
||||||
example/Version.h
|
example/Version.h
|
||||||
|
|
||||||
|
action-cli
|
||||||
|
dist
|
BIN
3rdparty/Win_x86/mingw/libcrypto-1_1.dll
vendored
Normal file
BIN
3rdparty/Win_x86/mingw/libcrypto-1_1.dll
vendored
Normal file
Binary file not shown.
BIN
3rdparty/Win_x86/mingw/libssl-1_1.dll
vendored
Normal file
BIN
3rdparty/Win_x86/mingw/libssl-1_1.dll
vendored
Normal file
Binary file not shown.
BIN
3rdparty/Win_x86/msvc/libcrypto-1_1.dll
vendored
Normal file
BIN
3rdparty/Win_x86/msvc/libcrypto-1_1.dll
vendored
Normal file
Binary file not shown.
BIN
3rdparty/Win_x86/msvc/libssl-1_1.dll
vendored
Normal file
BIN
3rdparty/Win_x86/msvc/libssl-1_1.dll
vendored
Normal file
Binary file not shown.
@ -8,7 +8,6 @@ list(APPEND CMAKE_MODULE_PATH ${FLUENTUI_DIRECTORY}/.cmake/)
|
|||||||
include(GetGitRevisionDescription)
|
include(GetGitRevisionDescription)
|
||||||
|
|
||||||
option(FLUENTUI_BUILD_EXAMPLES "Build FluentUI demo applications." ON)
|
option(FLUENTUI_BUILD_EXAMPLES "Build FluentUI demo applications." ON)
|
||||||
option(FLUENTUI_BUILD_FRAMELESSHEPLER "Build FramelessHelper." ON)
|
|
||||||
option(FLUENTUI_BUILD_STATIC_LIB "Build static library." OFF)
|
option(FLUENTUI_BUILD_STATIC_LIB "Build static library." OFF)
|
||||||
|
|
||||||
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core)
|
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core)
|
||||||
@ -32,14 +31,12 @@ if (FLUENTUI_BUILD_EXAMPLES)
|
|||||||
add_subdirectory(example)
|
add_subdirectory(example)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if (FLUENTUI_BUILD_FRAMELESSHEPLER)
|
set(FRAMELESSHELPER_BUILD_STATIC ON)
|
||||||
set(FRAMELESSHELPER_BUILD_STATIC ON)
|
set(FRAMELESSHELPER_NO_DEBUG_OUTPUT ON)
|
||||||
set(FRAMELESSHELPER_NO_DEBUG_OUTPUT ON)
|
set(FRAMELESSHELPER_BUILD_WIDGETS OFF)
|
||||||
add_subdirectory(framelesshelper)
|
add_subdirectory(framelesshelper)
|
||||||
endif ()
|
|
||||||
|
|
||||||
message("------------------------ FluentUI ------------------------")
|
message("------------------------ FluentUI ------------------------")
|
||||||
message("Build FluentUI demo applications.: ${FLUENTUI_BUILD_EXAMPLES}")
|
message("Build FluentUI demo applications.: ${FLUENTUI_BUILD_EXAMPLES}")
|
||||||
message("Build FramelessHelper.: ${FLUENTUI_BUILD_FRAMELESSHEPLER}")
|
|
||||||
message("Build static library.: ${FLUENTUI_BUILD_STATIC_LIB}")
|
message("Build static library.: ${FLUENTUI_BUILD_STATIC_LIB}")
|
||||||
message("Path to FluentUI plugin.: ${FLUENTUI_QML_PLUGIN_DIRECTORY}")
|
message("Path to FluentUI plugin.: ${FLUENTUI_QML_PLUGIN_DIRECTORY}")
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
QML FluentUI
|
QML FluentUI
|
||||||
</h1>
|
</h1>
|
||||||
<p align="center">
|
<p align="center">
|
||||||
A fluent design component library for Qt QML。 <a href="https://zhuzichu520.github.io">official wasm app.</a>
|
A fluent design component library for Qt QML, You need Pyside6 <a href="https://github.com/zhuzichu520/PySide6-FluentUI-QML">PySide6-FluentUI-QML</a>。
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
![win-badge] ![ubuntu-badge] ![macos-badge] ![release-badge] ![download-badge] ![download-latest]
|
![win-badge] ![ubuntu-badge] ![macos-badge] ![release-badge] ![download-badge] ![download-latest]
|
||||||
|
@ -262,4 +262,54 @@ zxing-cpp
|
|||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
See the License for the specific language governing permissions and
|
See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
|
|
||||||
|
************************************************************************************
|
||||||
|
ChartJs2QML
|
||||||
|
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2020 ChartJs2QML contributors (starting with Elypson, Michael A. Voelkel, https://github.com/Elypson)
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
|
||||||
|
************************************************************************************
|
||||||
|
qml-colorpicker
|
||||||
|
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2022 Ruslan Shestopalyuk
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
@ -18,9 +18,9 @@ endif()
|
|||||||
|
|
||||||
#设置可执行文件输出目录
|
#设置可执行文件输出目录
|
||||||
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
|
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin/debug)
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY $<1:${FLUENTUI_DIRECTORY}/bin/debug>)
|
||||||
else()
|
else()
|
||||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin/release)
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY $<1:${FLUENTUI_DIRECTORY}/bin/release>)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
#获取文件路径分隔符(解决执行命令的时候有些平台会报错)
|
#获取文件路径分隔符(解决执行命令的时候有些平台会报错)
|
||||||
@ -53,7 +53,7 @@ endforeach(filepath)
|
|||||||
|
|
||||||
if(QT_VERSION VERSION_GREATER_EQUAL "6.2")
|
if(QT_VERSION VERSION_GREATER_EQUAL "6.2")
|
||||||
#遍历所有qml文件
|
#遍历所有qml文件
|
||||||
file(GLOB_RECURSE QML_PATHS *.qml qmldir)
|
file(GLOB_RECURSE QML_PATHS *.qml)
|
||||||
foreach(filepath ${QML_PATHS})
|
foreach(filepath ${QML_PATHS})
|
||||||
string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/" "" filename ${filepath})
|
string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/" "" filename ${filepath})
|
||||||
if(${filepath} MATCHES "Qt${QT_VERSION_MAJOR}/")
|
if(${filepath} MATCHES "Qt${QT_VERSION_MAJOR}/")
|
||||||
@ -64,14 +64,14 @@ if(QT_VERSION VERSION_GREATER_EQUAL "6.2")
|
|||||||
endforeach(filepath)
|
endforeach(filepath)
|
||||||
|
|
||||||
#遍历所有资源文件
|
#遍历所有资源文件
|
||||||
file(GLOB_RECURSE RES_PATHS *.png *.jpg *.svg *.ico *.ttf *.webp)
|
file(GLOB_RECURSE RES_PATHS *.png *.jpg *.svg *.ico *.ttf *.webp *.obj qmldir)
|
||||||
foreach(filepath ${RES_PATHS})
|
foreach(filepath ${RES_PATHS})
|
||||||
string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/" "" filename ${filepath})
|
string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/" "" filename ${filepath})
|
||||||
list(APPEND resource_files ${filename})
|
list(APPEND resource_files ${filename})
|
||||||
endforeach(filepath)
|
endforeach(filepath)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
#如果是Windows平台,则生成rc文件
|
#如果是Windows平台,则生成rc文件,还有inno setup脚本文件
|
||||||
set(EXAMPLE_VERSION_RC_PATH "")
|
set(EXAMPLE_VERSION_RC_PATH "")
|
||||||
if(WIN32)
|
if(WIN32)
|
||||||
set(EXAMPLE_VERSION_RC_PATH ${CMAKE_BINARY_DIR}/version_${PROJECT_NAME}.rc)
|
set(EXAMPLE_VERSION_RC_PATH ${CMAKE_BINARY_DIR}/version_${PROJECT_NAME}.rc)
|
||||||
@ -79,6 +79,10 @@ if(WIN32)
|
|||||||
${FLUENTUI_DIRECTORY}/.cmake/version_exe.rc.in
|
${FLUENTUI_DIRECTORY}/.cmake/version_exe.rc.in
|
||||||
${EXAMPLE_VERSION_RC_PATH}
|
${EXAMPLE_VERSION_RC_PATH}
|
||||||
)
|
)
|
||||||
|
configure_file(
|
||||||
|
${FLUENTUI_DIRECTORY}/.cmake/InstallerScript.iss.in
|
||||||
|
${FLUENTUI_DIRECTORY}/action-cli/InstallerScript.iss
|
||||||
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
#添加可执行文件
|
#添加可执行文件
|
||||||
@ -93,12 +97,17 @@ else ()
|
|||||||
)
|
)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
#复制动态库到可执行文件同级目录下
|
|
||||||
if(WIN32)
|
if(WIN32)
|
||||||
if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
|
#复制动态库到可执行文件同级目录下
|
||||||
set(DLLPATH ${CMAKE_SOURCE_DIR}/3rdparty/msvc/*.dll)
|
if(CMAKE_SIZEOF_VOID_P EQUAL 4)
|
||||||
else()
|
set(3RDPARTY_ARCH_DIR ${CMAKE_SOURCE_DIR}/3rdparty/Win_x86)
|
||||||
set(DLLPATH ${CMAKE_SOURCE_DIR}/3rdparty/mingw/*.dll)
|
elseif(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||||
|
set(3RDPARTY_ARCH_DIR ${CMAKE_SOURCE_DIR}/3rdparty/Win_x64)
|
||||||
|
endif()
|
||||||
|
if(MSVC)
|
||||||
|
set(DLLPATH ${3RDPARTY_ARCH_DIR}/msvc/*.dll)
|
||||||
|
elseif(MINGW)
|
||||||
|
set(DLLPATH ${3RDPARTY_ARCH_DIR}/mingw/*.dll)
|
||||||
endif()
|
endif()
|
||||||
string(REPLACE "/" ${PATH_SEPARATOR} DLLPATH "${DLLPATH}")
|
string(REPLACE "/" ${PATH_SEPARATOR} DLLPATH "${DLLPATH}")
|
||||||
file(GLOB DLL_FILES ${DLLPATH})
|
file(GLOB DLL_FILES ${DLLPATH})
|
||||||
@ -122,7 +131,7 @@ else()
|
|||||||
target_include_directories(example PRIVATE
|
target_include_directories(example PRIVATE
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}
|
${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
)
|
)
|
||||||
target_sources(example PRIVATE resource.qrc)
|
target_sources(example PRIVATE example.qrc)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
#导入component头文件,不然通过QML_NAMED_ELEMENT生成的c++类会找不到头文件报错
|
#导入component头文件,不然通过QML_NAMED_ELEMENT生成的c++类会找不到头文件报错
|
||||||
@ -130,6 +139,13 @@ target_include_directories(example PRIVATE
|
|||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/component
|
${CMAKE_CURRENT_SOURCE_DIR}/src/component
|
||||||
)
|
)
|
||||||
|
|
||||||
|
#如果是静态库则需要手动注册插件,导入FluentUI.h头文件
|
||||||
|
if(FLUENTUI_BUILD_STATIC_LIB)
|
||||||
|
target_include_directories(example PRIVATE
|
||||||
|
${CMAKE_SOURCE_DIR}/src
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
#设置属性
|
#设置属性
|
||||||
set_target_properties(example PROPERTIES
|
set_target_properties(example PROPERTIES
|
||||||
MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com
|
MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com
|
||||||
@ -139,27 +155,12 @@ set_target_properties(example PROPERTIES
|
|||||||
WIN32_EXECUTABLE TRUE
|
WIN32_EXECUTABLE TRUE
|
||||||
)
|
)
|
||||||
|
|
||||||
#链接库
|
target_link_libraries(example PRIVATE
|
||||||
if (FLUENTUI_BUILD_STATIC_LIB)
|
Qt${QT_VERSION_MAJOR}::Quick
|
||||||
target_link_libraries(example PRIVATE
|
Qt${QT_VERSION_MAJOR}::Svg
|
||||||
Qt${QT_VERSION_MAJOR}::Quick
|
Qt${QT_VERSION_MAJOR}::Network
|
||||||
Qt${QT_VERSION_MAJOR}::Svg
|
fluentuiplugin
|
||||||
Qt${QT_VERSION_MAJOR}::Network
|
)
|
||||||
fluentui
|
|
||||||
fluentuiplugin
|
|
||||||
FramelessHelper::Core
|
|
||||||
FramelessHelper::Quick
|
|
||||||
)
|
|
||||||
else()
|
|
||||||
target_link_libraries(example PRIVATE
|
|
||||||
Qt${QT_VERSION_MAJOR}::Quick
|
|
||||||
Qt${QT_VERSION_MAJOR}::Svg
|
|
||||||
Qt${QT_VERSION_MAJOR}::Network
|
|
||||||
fluentuiplugin
|
|
||||||
FramelessHelper::Core
|
|
||||||
FramelessHelper::Quick
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
#安装
|
#安装
|
||||||
install(TARGETS example
|
install(TARGETS example
|
||||||
|
@ -123,10 +123,8 @@
|
|||||||
<file>res/image/qrcode_zfb.jpg</file>
|
<file>res/image/qrcode_zfb.jpg</file>
|
||||||
<file>qml/App.qml</file>
|
<file>qml/App.qml</file>
|
||||||
<file>qml/component/CodeExpander.qml</file>
|
<file>qml/component/CodeExpander.qml</file>
|
||||||
<file>qml/component/CustomWindow.qml</file>
|
|
||||||
<file>qml/global/ItemsFooter.qml</file>
|
<file>qml/global/ItemsFooter.qml</file>
|
||||||
<file>qml/global/ItemsOriginal.qml</file>
|
<file>qml/global/ItemsOriginal.qml</file>
|
||||||
<file>qml/global/MainEvent.qml</file>
|
|
||||||
<file>qml/global/qmldir</file>
|
<file>qml/global/qmldir</file>
|
||||||
<file>qml/page/T_Acrylic.qml</file>
|
<file>qml/page/T_Acrylic.qml</file>
|
||||||
<file>qml/page/T_Awesome.qml</file>
|
<file>qml/page/T_Awesome.qml</file>
|
||||||
@ -145,7 +143,6 @@
|
|||||||
<file>qml/page/T_Expander.qml</file>
|
<file>qml/page/T_Expander.qml</file>
|
||||||
<file>qml/page/T_FlipView.qml</file>
|
<file>qml/page/T_FlipView.qml</file>
|
||||||
<file>qml/page/T_Home.qml</file>
|
<file>qml/page/T_Home.qml</file>
|
||||||
<file>qml/page/T_Http.qml</file>
|
|
||||||
<file>qml/page/T_Image.qml</file>
|
<file>qml/page/T_Image.qml</file>
|
||||||
<file>qml/page/T_InfoBar.qml</file>
|
<file>qml/page/T_InfoBar.qml</file>
|
||||||
<file>qml/page/T_Menu.qml</file>
|
<file>qml/page/T_Menu.qml</file>
|
||||||
@ -186,5 +183,12 @@
|
|||||||
<file>res/image/image_1.jpg</file>
|
<file>res/image/image_1.jpg</file>
|
||||||
<file>qml/window/PageWindow.qml</file>
|
<file>qml/window/PageWindow.qml</file>
|
||||||
<file>qml/page/T_StaggeredView.qml</file>
|
<file>qml/page/T_StaggeredView.qml</file>
|
||||||
|
<file>qml/viewmodel/SettingsViewModel.qml</file>
|
||||||
|
<file>qml/viewmodel/TextBoxViewModel.qml</file>
|
||||||
|
<file>qml/page/T_Clip.qml</file>
|
||||||
|
<file>qml/page/T_3D.qml</file>
|
||||||
|
<file>qml/global/Lang.qml</file>
|
||||||
|
<file>qml/page/T_Network.qml</file>
|
||||||
|
<file>qml/page/T_ShortcutPicker.qml</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
@ -4,29 +4,34 @@ import QtQuick.Controls
|
|||||||
import QtQuick.Layouts
|
import QtQuick.Layouts
|
||||||
import FluentUI
|
import FluentUI
|
||||||
|
|
||||||
Window {
|
Item {
|
||||||
id: app
|
id: app
|
||||||
flags: Qt.SplashScreen
|
|
||||||
|
|
||||||
FluHttpInterceptor{
|
Connections{
|
||||||
id:interceptor
|
target: FluTheme
|
||||||
function onIntercept(request){
|
function onDarkModeChanged(){
|
||||||
if(request.method === "get"){
|
SettingsHelper.saveDarkMode(FluTheme.darkMode)
|
||||||
request.params["method"] = "get"
|
}
|
||||||
}
|
}
|
||||||
if(request.method === "post"){
|
|
||||||
request.params["method"] = "post"
|
Connections{
|
||||||
}
|
target: FluApp
|
||||||
request.headers["token"] ="yyds"
|
function onVsyncChanged(){
|
||||||
request.headers["os"] ="pc"
|
SettingsHelper.saveVsync(FluApp.vsync)
|
||||||
console.debug(JSON.stringify(request))
|
}
|
||||||
return request
|
function onUseSystemAppBarChanged(){
|
||||||
|
SettingsHelper.saveUseSystemAppBar(FluApp.useSystemAppBar)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Component.onCompleted: {
|
Component.onCompleted: {
|
||||||
|
FluNetwork.setInterceptor(function(param){
|
||||||
|
param.addHeader("Token","000000000000000000000")
|
||||||
|
})
|
||||||
FluApp.init(app)
|
FluApp.init(app)
|
||||||
FluTheme.darkMode = FluThemeType.System
|
FluApp.useSystemAppBar = SettingsHelper.getUseSystemAppBar()
|
||||||
|
FluApp.vsync = SettingsHelper.getVsync()
|
||||||
|
FluTheme.darkMode = SettingsHelper.getDarkMode()
|
||||||
FluTheme.enableAnimation = true
|
FluTheme.enableAnimation = true
|
||||||
FluApp.routes = {
|
FluApp.routes = {
|
||||||
"/":"qrc:/example/qml/window/MainWindow.qml",
|
"/":"qrc:/example/qml/window/MainWindow.qml",
|
||||||
@ -39,7 +44,6 @@ Window {
|
|||||||
"/pageWindow":"qrc:/example/qml/window/PageWindow.qml"
|
"/pageWindow":"qrc:/example/qml/window/PageWindow.qml"
|
||||||
}
|
}
|
||||||
FluApp.initialRoute = "/"
|
FluApp.initialRoute = "/"
|
||||||
FluApp.httpInterceptor = interceptor
|
|
||||||
FluApp.run()
|
FluApp.run()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -80,7 +80,6 @@ FluExpander{
|
|||||||
"FluIcon",
|
"FluIcon",
|
||||||
"FluIconButton",
|
"FluIconButton",
|
||||||
"FluInfoBar",
|
"FluInfoBar",
|
||||||
"FluItem",
|
|
||||||
"FluMediaPlayer",
|
"FluMediaPlayer",
|
||||||
"FluMenu",
|
"FluMenu",
|
||||||
"FluMenuItem",
|
"FluMenuItem",
|
||||||
@ -131,14 +130,18 @@ FluExpander{
|
|||||||
"FluRadioButtons",
|
"FluRadioButtons",
|
||||||
"FluImage",
|
"FluImage",
|
||||||
"FluSpinBox",
|
"FluSpinBox",
|
||||||
"FluHttp",
|
|
||||||
"FluWatermark",
|
"FluWatermark",
|
||||||
"FluTour",
|
"FluTour",
|
||||||
"FluQRCode",
|
"FluQRCode",
|
||||||
"FluTimeline",
|
"FluTimeline",
|
||||||
"FluChart",
|
"FluChart",
|
||||||
"FluRangeSlider",
|
"FluRangeSlider",
|
||||||
"FluStaggeredView"
|
"FluStaggeredView",
|
||||||
|
"FluProgressButton",
|
||||||
|
"FluLoadingButton",
|
||||||
|
"FluClip",
|
||||||
|
"FluNetwork",
|
||||||
|
"FluShortcutPicker"
|
||||||
];
|
];
|
||||||
code = code.replace(/\n/g, "<br>");
|
code = code.replace(/\n/g, "<br>");
|
||||||
code = code.replace(/ /g, " ");
|
code = code.replace(/ /g, " ");
|
||||||
|
@ -1,64 +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
|
|
||||||
icon:"qrc:/example/res/image/favicon.ico"
|
|
||||||
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)
|
|
||||||
moveWindowToDesktopCenter()
|
|
||||||
setHitTestVisible(title_bar.minimizeButton())
|
|
||||||
setHitTestVisible(title_bar.maximizeButton())
|
|
||||||
setHitTestVisible(title_bar.closeButton())
|
|
||||||
setWindowFixedSize(fixSize)
|
|
||||||
title_bar.maximizeButton.visible = !fixSize
|
|
||||||
if (blurBehindWindowEnabled)
|
|
||||||
window.background = undefined
|
|
||||||
window.show()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Connections{
|
|
||||||
target: FluTheme
|
|
||||||
function onDarkChanged(){
|
|
||||||
if (FluTheme.dark)
|
|
||||||
FramelessUtils.systemTheme = FramelessHelperConstants.Dark
|
|
||||||
else
|
|
||||||
FramelessUtils.systemTheme = FramelessHelperConstants.Light
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function setHitTestVisible(com){
|
|
||||||
framless_helper.setHitTestVisible(com)
|
|
||||||
}
|
|
||||||
function setTitleBarItem(com){
|
|
||||||
framless_helper.setTitleBarItem(com)
|
|
||||||
}
|
|
||||||
}
|
|
@ -6,25 +6,25 @@ import FluentUI
|
|||||||
FluObject{
|
FluObject{
|
||||||
|
|
||||||
property var navigationView
|
property var navigationView
|
||||||
|
property var paneItemMenu
|
||||||
|
|
||||||
id:footer_items
|
id:footer_items
|
||||||
|
|
||||||
FluPaneItemSeparator{}
|
FluPaneItemSeparator{}
|
||||||
|
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:lang.about
|
title:Lang.about
|
||||||
icon:FluentIcons.Contact
|
icon:FluentIcons.Contact
|
||||||
onDropped: { FluApp.navigate("/about") }
|
|
||||||
onTapListener:function(){
|
onTapListener:function(){
|
||||||
FluApp.navigate("/about")
|
FluApp.navigate("/about")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:lang.settings
|
title:Lang.settings
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
icon:FluentIcons.Settings
|
icon:FluentIcons.Settings
|
||||||
url:"qrc:/example/qml/page/T_Settings.qml"
|
url:"qrc:/example/qml/page/T_Settings.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{
|
onTap:{
|
||||||
navigationView.push(url)
|
navigationView.push(url)
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,7 @@ import FluentUI
|
|||||||
FluObject{
|
FluObject{
|
||||||
|
|
||||||
property var navigationView
|
property var navigationView
|
||||||
|
property var paneItemMenu
|
||||||
|
|
||||||
function rename(item, newName){
|
function rename(item, newName){
|
||||||
if(newName && newName.trim().length>0){
|
if(newName && newName.trim().length>0){
|
||||||
@ -16,51 +17,31 @@ FluObject{
|
|||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
id:item_home
|
id:item_home
|
||||||
count: 9
|
count: 9
|
||||||
title:lang.home
|
title:Lang.home
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
infoBadge:FluBadge{
|
infoBadge:FluBadge{
|
||||||
count: item_home.count
|
count: item_home.count
|
||||||
}
|
}
|
||||||
icon:FluentIcons.Home
|
icon:FluentIcons.Home
|
||||||
url:"qrc:/example/qml/page/T_Home.qml"
|
url:"qrc:/example/qml/page/T_Home.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{
|
onTap:{
|
||||||
if(navigationView.getCurrentUrl()){
|
if(navigationView.getCurrentUrl()){
|
||||||
item_home.count = 0
|
item_home.count = 0
|
||||||
}
|
}
|
||||||
navigationView.push(url)
|
navigationView.push(url)
|
||||||
}
|
}
|
||||||
editDelegate: FluTextBox{
|
}
|
||||||
text:item_home.title
|
|
||||||
}
|
FluPaneItemExpander{
|
||||||
menuDelegate: FluMenu{
|
title:"PaneItemExpander Disabled"
|
||||||
id:nav_item_right_menu
|
iconVisible: false
|
||||||
width: 120
|
disabled: true
|
||||||
FluMenuItem{
|
|
||||||
text: "重命名"
|
|
||||||
visible: true
|
|
||||||
onClicked: {
|
|
||||||
item_home.showEdit = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
FluPaneItemExpander{
|
FluPaneItemExpander{
|
||||||
id:item_expander_basic_input
|
id:item_expander_basic_input
|
||||||
title:lang.basic_input
|
title:Lang.basic_input
|
||||||
icon:FluentIcons.CheckboxComposite
|
icon:FluentIcons.CheckboxComposite
|
||||||
editDelegate: FluTextBox{
|
|
||||||
text:item_expander_basic_input.title
|
|
||||||
}
|
|
||||||
menuDelegate: FluMenu{
|
|
||||||
FluMenuItem{
|
|
||||||
text: "重命名"
|
|
||||||
visible: true
|
|
||||||
onClicked: {
|
|
||||||
item_expander_basic_input.showEdit = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
id:item_buttons
|
id:item_buttons
|
||||||
count: 99
|
count: 99
|
||||||
@ -68,11 +49,11 @@ FluObject{
|
|||||||
count: item_buttons.count
|
count: item_buttons.count
|
||||||
}
|
}
|
||||||
title:"Buttons"
|
title:"Buttons"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
image:"qrc:/example/res/image/control/Button.png"
|
image:"qrc:/example/res/image/control/Button.png"
|
||||||
recentlyUpdated:true
|
recentlyUpdated:true
|
||||||
desc:"A control that responds to user input and raisesa Click event."
|
desc:"A control that responds to user input and raisesa Click event."
|
||||||
url:"qrc:/example/qml/page/T_Buttons.qml"
|
url:"qrc:/example/qml/page/T_Buttons.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{
|
onTap:{
|
||||||
item_buttons.count = 0
|
item_buttons.count = 0
|
||||||
navigationView.push(url)
|
navigationView.push(url)
|
||||||
@ -81,175 +62,195 @@ FluObject{
|
|||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
id:item_text
|
id:item_text
|
||||||
title:"Text"
|
title:"Text"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
count: 5
|
count: 5
|
||||||
infoBadge:FluBadge{
|
infoBadge:FluBadge{
|
||||||
count: item_text.count
|
count: item_text.count
|
||||||
color: Qt.rgba(82/255,196/255,26/255,1)
|
color: Qt.rgba(82/255,196/255,26/255,1)
|
||||||
}
|
}
|
||||||
url:"qrc:/example/qml/page/T_Text.qml"
|
url:"qrc:/example/qml/page/T_Text.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
onTap:{
|
||||||
onTap:{ navigationView.push(url) }
|
item_text.count = 0
|
||||||
|
navigationView.push(url)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"Image"
|
title:"Image"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_Image.qml"
|
url:"qrc:/example/qml/page/T_Image.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"Slider"
|
title:"Slider"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
image:"qrc:/example/res/image/control/Slider.png"
|
image:"qrc:/example/res/image/control/Slider.png"
|
||||||
recentlyUpdated:true
|
recentlyUpdated:true
|
||||||
desc:"A control that lets the user select from a rangeof values by moving a Thumb control along atrack."
|
desc:"A control that lets the user select from a rangeof values by moving a Thumb control along atrack."
|
||||||
url:"qrc:/example/qml/page/T_Slider.qml"
|
url:"qrc:/example/qml/page/T_Slider.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"CheckBox"
|
title:"CheckBox"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
image:"qrc:/example/res/image/control/Checkbox.png"
|
image:"qrc:/example/res/image/control/Checkbox.png"
|
||||||
recentlyUpdated:true
|
recentlyUpdated:true
|
||||||
desc:"A control that a user can select or clear."
|
desc:"A control that a user can select or clear."
|
||||||
url:"qrc:/example/qml/page/T_CheckBox.qml"
|
url:"qrc:/example/qml/page/T_CheckBox.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"RadioButton"
|
title:"RadioButton"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_RadioButton.qml"
|
url:"qrc:/example/qml/page/T_RadioButton.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"ToggleSwitch"
|
title:"ToggleSwitch"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_ToggleSwitch.qml"
|
url:"qrc:/example/qml/page/T_ToggleSwitch.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
|
FluPaneItem{
|
||||||
|
title:"PaneItem Disabled"
|
||||||
|
disabled: true
|
||||||
|
icon: FluentIcons.Error
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FluPaneItemExpander{
|
FluPaneItemExpander{
|
||||||
title:lang.form
|
title:Lang.form
|
||||||
icon:FluentIcons.GridView
|
icon:FluentIcons.GridView
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"TextBox"
|
title:"TextBox"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_TextBox.qml"
|
url:"qrc:/example/qml/page/T_TextBox.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"TimePicker"
|
title:"TimePicker"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_TimePicker.qml"
|
url:"qrc:/example/qml/page/T_TimePicker.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"DatePicker"
|
title:"DatePicker"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_DatePicker.qml"
|
url:"qrc:/example/qml/page/T_DatePicker.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"CalendarPicker"
|
title:"CalendarPicker"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_CalendarPicker.qml"
|
url:"qrc:/example/qml/page/T_CalendarPicker.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"ColorPicker"
|
title:"ColorPicker"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_ColorPicker.qml"
|
url:"qrc:/example/qml/page/T_ColorPicker.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
onTap:{ navigationView.push(url) }
|
||||||
|
}
|
||||||
|
FluPaneItem{
|
||||||
|
title:"ShortcutPicker"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
|
url:"qrc:/example/qml/page/T_ShortcutPicker.qml"
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FluPaneItemExpander{
|
FluPaneItemExpander{
|
||||||
title:lang.surface
|
title:Lang.surface
|
||||||
icon:FluentIcons.SurfaceHub
|
icon:FluentIcons.SurfaceHub
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"InfoBar"
|
title:"InfoBar"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
image:"qrc:/example/res/image/control/InfoBar.png"
|
image:"qrc:/example/res/image/control/InfoBar.png"
|
||||||
recentlyUpdated:true
|
recentlyUpdated:true
|
||||||
desc:"An inline message to display app-wide statuschange information."
|
desc:"An inline message to display app-wide statuschange information."
|
||||||
url:"qrc:/example/qml/page/T_InfoBar.qml"
|
url:"qrc:/example/qml/page/T_InfoBar.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"Progress"
|
title:"Progress"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_Progress.qml"
|
url:"qrc:/example/qml/page/T_Progress.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"RatingControl"
|
title:"RatingControl"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_RatingControl.qml"
|
url:"qrc:/example/qml/page/T_RatingControl.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"Badge"
|
title:"Badge"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_Badge.qml"
|
url:"qrc:/example/qml/page/T_Badge.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"Rectangle"
|
title:"Rectangle"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_Rectangle.qml"
|
url:"qrc:/example/qml/page/T_Rectangle.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
onTap:{ navigationView.push(url) }
|
||||||
|
}
|
||||||
|
FluPaneItem{
|
||||||
|
title:"Clip"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
|
url:"qrc:/example/qml/page/T_Clip.qml"
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"StatusView"
|
title:"StatusView"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_StatusView.qml"
|
url:"qrc:/example/qml/page/T_StatusView.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"Carousel"
|
title:"Carousel"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_Carousel.qml"
|
url:"qrc:/example/qml/page/T_Carousel.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"Expander"
|
title:"Expander"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_Expander.qml"
|
url:"qrc:/example/qml/page/T_Expander.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"StaggeredView"
|
title:"StaggeredView"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_StaggeredView.qml"
|
url:"qrc:/example/qml/page/T_StaggeredView.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"Watermark"
|
title:"Watermark"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_Watermark.qml"
|
url:"qrc:/example/qml/page/T_Watermark.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FluPaneItemExpander{
|
FluPaneItemExpander{
|
||||||
title:lang.popus
|
title:Lang.popus
|
||||||
icon:FluentIcons.ButtonMenu
|
icon:FluentIcons.ButtonMenu
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"Dialog"
|
title:"Dialog"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_Dialog.qml"
|
url:"qrc:/example/qml/page/T_Dialog.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
id:item_combobox
|
id:item_combobox
|
||||||
title:"ComboBox"
|
title:"ComboBox"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
count: 9
|
count: 9
|
||||||
infoBadge:FluBadge{
|
infoBadge:FluBadge{
|
||||||
count: item_combobox.count
|
count: item_combobox.count
|
||||||
color: Qt.rgba(250/255,173/255,20/255,1)
|
color: Qt.rgba(250/255,173/255,20/255,1)
|
||||||
}
|
}
|
||||||
url:"qrc:/example/qml/page/T_ComboBox.qml"
|
url:"qrc:/example/qml/page/T_ComboBox.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{
|
onTap:{
|
||||||
item_combobox.count = 0
|
item_combobox.count = 0
|
||||||
navigationView.push("qrc:/example/qml/page/T_ComboBox.qml")
|
navigationView.push("qrc:/example/qml/page/T_ComboBox.qml")
|
||||||
@ -257,112 +258,112 @@ FluObject{
|
|||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"Tooltip"
|
title:"Tooltip"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_Tooltip.qml"
|
url:"qrc:/example/qml/page/T_Tooltip.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"Menu"
|
title:"Menu"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_Menu.qml"
|
url:"qrc:/example/qml/page/T_Menu.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FluPaneItemExpander{
|
FluPaneItemExpander{
|
||||||
title:lang.navigation
|
title:Lang.navigation
|
||||||
icon:FluentIcons.AllApps
|
icon:FluentIcons.AllApps
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"Pivot"
|
title:"Pivot"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
image:"qrc:/example/res/image/control/Pivot.png"
|
image:"qrc:/example/res/image/control/Pivot.png"
|
||||||
recentlyAdded:true
|
recentlyAdded:true
|
||||||
order:3
|
order:3
|
||||||
desc:"Presents information from different sources in atabbed view."
|
desc:"Presents information from different sources in atabbed view."
|
||||||
url:"qrc:/example/qml/page/T_Pivot.qml"
|
url:"qrc:/example/qml/page/T_Pivot.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"BreadcrumbBar"
|
title:"BreadcrumbBar"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_BreadcrumbBar.qml"
|
url:"qrc:/example/qml/page/T_BreadcrumbBar.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"TabView"
|
title:"TabView"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
image:"qrc:/example/res/image/control/TabView.png"
|
image:"qrc:/example/res/image/control/TabView.png"
|
||||||
recentlyAdded:true
|
recentlyAdded:true
|
||||||
order:1
|
order:1
|
||||||
desc:"A control that displays a collection of tabs thatcan be used to display several documents."
|
desc:"A control that displays a collection of tabs thatcan be used to display several documents."
|
||||||
url:"qrc:/example/qml/page/T_TabView.qml"
|
url:"qrc:/example/qml/page/T_TabView.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"TreeView"
|
title:"TreeView"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_TreeView.qml"
|
url:"qrc:/example/qml/page/T_TreeView.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"TableView"
|
title:"TableView"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
image:"qrc:/example/res/image/control/DataGrid.png"
|
image:"qrc:/example/res/image/control/DataGrid.png"
|
||||||
recentlyAdded:true
|
recentlyAdded:true
|
||||||
order:4
|
order:4
|
||||||
desc:"The TableView control provides a flexible way to display a collection of data in rows and columns"
|
desc:"The TableView control provides a flexible way to display a collection of data in rows and columns"
|
||||||
url:"qrc:/example/qml/page/T_TableView.qml"
|
url:"qrc:/example/qml/page/T_TableView.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"Pagination"
|
title:"Pagination"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_Pagination.qml"
|
url:"qrc:/example/qml/page/T_Pagination.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"MultiWindow"
|
title:"MultiWindow"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_MultiWindow.qml"
|
url:"qrc:/example/qml/page/T_MultiWindow.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"FlipView"
|
title:"FlipView"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
image:"qrc:/example/res/image/control/FlipView.png"
|
image:"qrc:/example/res/image/control/FlipView.png"
|
||||||
recentlyAdded:true
|
recentlyAdded:true
|
||||||
order:2
|
order:2
|
||||||
desc:"Presents a collection of items that the user canflip through, one item at a time."
|
desc:"Presents a collection of items that the user canflip through, one item at a time."
|
||||||
url:"qrc:/example/qml/page/T_FlipView.qml"
|
url:"qrc:/example/qml/page/T_FlipView.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FluPaneItemExpander{
|
FluPaneItemExpander{
|
||||||
title:lang.theming
|
title:Lang.theming
|
||||||
icon:FluentIcons.Brightness
|
icon:FluentIcons.Brightness
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"Acrylic"
|
title:"Acrylic"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_Acrylic.qml"
|
url:"qrc:/example/qml/page/T_Acrylic.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"Theme"
|
title:"Theme"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_Theme.qml"
|
url:"qrc:/example/qml/page/T_Theme.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"Typography"
|
title:"Typography"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_Typography.qml"
|
url:"qrc:/example/qml/page/T_Typography.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"Awesome"
|
title:"Awesome"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_Awesome.qml"
|
url:"qrc:/example/qml/page/T_Awesome.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -373,60 +374,60 @@ FluObject{
|
|||||||
}
|
}
|
||||||
|
|
||||||
FluPaneItemExpander{
|
FluPaneItemExpander{
|
||||||
title:lang.other
|
title:Lang.other
|
||||||
icon:FluentIcons.Shop
|
icon:FluentIcons.Shop
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"QRCode"
|
title:"QRCode"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_QRCode.qml"
|
url:"qrc:/example/qml/page/T_QRCode.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"Tour"
|
title:"Tour"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_Tour.qml"
|
url:"qrc:/example/qml/page/T_Tour.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"Timeline"
|
title:"Timeline"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_Timeline.qml"
|
url:"qrc:/example/qml/page/T_Timeline.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"Screenshot"
|
title:"Screenshot(Todo)"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_Screenshot.qml"
|
url:"qrc:/example/qml/page/T_Screenshot.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"Captcha"
|
title:"Captcha"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_Captcha.qml"
|
url:"qrc:/example/qml/page/T_Captcha.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"Chart"
|
title:"Chart"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_Chart.qml"
|
url:"qrc:/example/qml/page/T_Chart.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"Http"
|
title:"Network"
|
||||||
url:"qrc:/example/qml/page/T_Http.qml"
|
menuDelegate: paneItemMenu
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
url:"qrc:/example/qml/page/T_Network.qml"
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
id:item_other
|
id:item_other
|
||||||
title:"RemoteLoader"
|
title:"RemoteLoader"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
count: 99
|
count: 99
|
||||||
infoBadge:FluBadge{
|
infoBadge:FluBadge{
|
||||||
count: item_other.count
|
count: item_other.count
|
||||||
color: Qt.rgba(82/255,196/255,26/255,1)
|
color: Qt.rgba(82/255,196/255,26/255,1)
|
||||||
}
|
}
|
||||||
url:"qrc:/example/qml/page/T_RemoteLoader.qml"
|
url:"qrc:/example/qml/page/T_RemoteLoader.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{
|
onTap:{
|
||||||
item_other.count = 0
|
item_other.count = 0
|
||||||
navigationView.push("qrc:/example/qml/page/T_RemoteLoader.qml")
|
navigationView.push("qrc:/example/qml/page/T_RemoteLoader.qml")
|
||||||
@ -437,7 +438,12 @@ FluObject{
|
|||||||
onTapListener:function(){
|
onTapListener:function(){
|
||||||
FluApp.navigate("/hotload")
|
FluApp.navigate("/hotload")
|
||||||
}
|
}
|
||||||
onDropped:{ FluApp.navigate("/hotload") }
|
}
|
||||||
|
FluPaneItem{
|
||||||
|
title:"3D"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
|
url:"qrc:/example/qml/page/T_3D.qml"
|
||||||
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -474,6 +480,9 @@ FluObject{
|
|||||||
}
|
}
|
||||||
|
|
||||||
function getSearchData(){
|
function getSearchData(){
|
||||||
|
if(!navigationView){
|
||||||
|
return
|
||||||
|
}
|
||||||
var arr = []
|
var arr = []
|
||||||
var items = navigationView.getItems();
|
var items = navigationView.getItems();
|
||||||
for(var i=0;i<items.length;i++){
|
for(var i=0;i<items.length;i++){
|
||||||
|
77
example/qml-Qt6/global/Lang.qml
Normal file
77
example/qml-Qt6/global/Lang.qml
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
pragma Singleton
|
||||||
|
|
||||||
|
import QtQuick
|
||||||
|
|
||||||
|
QtObject {
|
||||||
|
|
||||||
|
property string home
|
||||||
|
property string basic_input
|
||||||
|
property string form
|
||||||
|
property string surface
|
||||||
|
property string popus
|
||||||
|
property string navigation
|
||||||
|
property string theming
|
||||||
|
property string media
|
||||||
|
property string dark_mode
|
||||||
|
property string sys_dark_mode
|
||||||
|
property string search
|
||||||
|
property string about
|
||||||
|
property string settings
|
||||||
|
property string locale
|
||||||
|
property string navigation_view_display_mode
|
||||||
|
property string other
|
||||||
|
|
||||||
|
function zh(){
|
||||||
|
home="首页"
|
||||||
|
basic_input="基本输入"
|
||||||
|
form="表单"
|
||||||
|
surface="表面"
|
||||||
|
popus="弹窗"
|
||||||
|
navigation="导航"
|
||||||
|
theming="主题"
|
||||||
|
media="媒体"
|
||||||
|
dark_mode="夜间模式"
|
||||||
|
sys_dark_mode="跟随系统"
|
||||||
|
search="查找"
|
||||||
|
about="关于"
|
||||||
|
settings="设置"
|
||||||
|
locale="语言环境"
|
||||||
|
navigation_view_display_mode="导航视图显示模式"
|
||||||
|
other="其他"
|
||||||
|
}
|
||||||
|
|
||||||
|
function en(){
|
||||||
|
home="Home"
|
||||||
|
basic_input="Basic Input"
|
||||||
|
form="Form"
|
||||||
|
surface="Surfaces"
|
||||||
|
popus="Popus"
|
||||||
|
navigation="Navigation"
|
||||||
|
theming="Theming"
|
||||||
|
media="Media"
|
||||||
|
dark_mode="Dark Mode"
|
||||||
|
sys_dark_mode="Sync with system"
|
||||||
|
search="Search"
|
||||||
|
about="About"
|
||||||
|
settings="Settings"
|
||||||
|
locale="Locale"
|
||||||
|
navigation_view_display_mode="NavigationView Display Mode"
|
||||||
|
other="Other"
|
||||||
|
}
|
||||||
|
|
||||||
|
property string __locale
|
||||||
|
property var __localeList: ["Zh","En"]
|
||||||
|
|
||||||
|
on__LocaleChanged: {
|
||||||
|
if(__locale === "Zh"){
|
||||||
|
zh()
|
||||||
|
}else{
|
||||||
|
en()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Component.onCompleted: {
|
||||||
|
__locale = "En"
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,9 +0,0 @@
|
|||||||
pragma Singleton
|
|
||||||
|
|
||||||
import QtQuick
|
|
||||||
import QtQuick.Controls
|
|
||||||
import FluentUI
|
|
||||||
|
|
||||||
QtObject {
|
|
||||||
property int displayMode : FluNavigationViewType.Auto
|
|
||||||
}
|
|
@ -1,3 +1,3 @@
|
|||||||
singleton ItemsOriginal 1.0 ItemsOriginal.qml
|
singleton ItemsOriginal 1.0 ItemsOriginal.qml
|
||||||
singleton ItemsFooter 1.0 ItemsFooter.qml
|
singleton ItemsFooter 1.0 ItemsFooter.qml
|
||||||
singleton MainEvent 1.0 MainEvent.qml
|
singleton Lang 1.0 Lang.qml
|
||||||
|
120
example/qml-Qt6/page/T_3D.qml
Normal file
120
example/qml-Qt6/page/T_3D.qml
Normal file
@ -0,0 +1,120 @@
|
|||||||
|
import QtQuick
|
||||||
|
import QtQuick.Layouts
|
||||||
|
import QtQuick.Controls
|
||||||
|
import QtQuick.Window
|
||||||
|
import FluentUI
|
||||||
|
import Qt3D.Core
|
||||||
|
import Qt3D.Render
|
||||||
|
import Qt3D.Input
|
||||||
|
import Qt3D.Extras
|
||||||
|
import QtQuick.Scene3D
|
||||||
|
import QtQuick.Dialogs
|
||||||
|
import Qt.labs.platform
|
||||||
|
import "qrc:///example/qml/component"
|
||||||
|
|
||||||
|
FluContentPage{
|
||||||
|
|
||||||
|
id:root
|
||||||
|
title:"3D"
|
||||||
|
|
||||||
|
Scene3D{
|
||||||
|
id:scene_3d
|
||||||
|
anchors.fill: parent
|
||||||
|
focus: true
|
||||||
|
aspects: ["input", "logic"]
|
||||||
|
cameraAspectRatioMode: Scene3D.AutomaticAspectRatio
|
||||||
|
Entity {
|
||||||
|
Camera {
|
||||||
|
id: camera
|
||||||
|
projectionType: CameraLens.PerspectiveProjection
|
||||||
|
fieldOfView: 22.5
|
||||||
|
aspectRatio: scene_3d.width / scene_3d.height
|
||||||
|
nearPlane: 1
|
||||||
|
farPlane: 1000.0
|
||||||
|
viewCenter: Qt.vector3d( 0.0, 0.0, 0.0 )
|
||||||
|
upVector: Qt.vector3d( 0.0, 1.0, 0.0 )
|
||||||
|
position: Qt.vector3d( 0.0, 0.0, 15.0 )
|
||||||
|
}
|
||||||
|
FirstPersonCameraController {
|
||||||
|
linearSpeed: 100
|
||||||
|
lookSpeed: 50
|
||||||
|
camera: camera
|
||||||
|
}
|
||||||
|
components: [
|
||||||
|
RenderSettings{
|
||||||
|
activeFrameGraph: ForwardRenderer{
|
||||||
|
clearColor: Qt.rgba(0,0,0,0);
|
||||||
|
camera: camera
|
||||||
|
}
|
||||||
|
},
|
||||||
|
InputSettings{}
|
||||||
|
]
|
||||||
|
Mesh {
|
||||||
|
id: mesh
|
||||||
|
source: "https://zhu-zichu.gitee.io/test.obj"
|
||||||
|
}
|
||||||
|
PhongMaterial {
|
||||||
|
id: material
|
||||||
|
ambient: color_picker.colorValue
|
||||||
|
}
|
||||||
|
Transform{
|
||||||
|
id:transform
|
||||||
|
scale: 1.0
|
||||||
|
translation: Qt.vector3d(0, 0, 0)
|
||||||
|
rotation: fromEulerAngles(0, 0, 0)
|
||||||
|
property real hAngle:0.0
|
||||||
|
NumberAnimation on hAngle{
|
||||||
|
from:0
|
||||||
|
to:360.0
|
||||||
|
duration: 5000
|
||||||
|
loops: Animation.Infinite
|
||||||
|
}
|
||||||
|
matrix:{
|
||||||
|
var m=Qt.matrix4x4();
|
||||||
|
m.rotate(hAngle,Qt.vector3d(0,1,0));
|
||||||
|
m.translate(Qt.vector3d(0,0,0));
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Entity {
|
||||||
|
id: entity
|
||||||
|
components: [mesh, material,transform]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ColumnLayout{
|
||||||
|
RowLayout{
|
||||||
|
spacing: 10
|
||||||
|
Layout.topMargin: 20
|
||||||
|
FluText{
|
||||||
|
text:"tintColor:"
|
||||||
|
Layout.alignment: Qt.AlignVCenter
|
||||||
|
}
|
||||||
|
FluColorPicker{
|
||||||
|
id:color_picker
|
||||||
|
enableAlphaChannel:false
|
||||||
|
Component.onCompleted: {
|
||||||
|
setColor("gray")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FluButton{
|
||||||
|
text:"选择obj资源"
|
||||||
|
onClicked: {
|
||||||
|
file_dialog.open()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FileDialog {
|
||||||
|
id: file_dialog
|
||||||
|
nameFilters: ["Obj files (*.obj)"]
|
||||||
|
folder: StandardPaths.writableLocation(StandardPaths.DocumentsLocation)
|
||||||
|
onAccepted: {
|
||||||
|
var fileUrl = file_dialog.currentFile
|
||||||
|
mesh.source = fileUrl
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -47,10 +47,10 @@ FluScrollablePage{
|
|||||||
height: 1200/4+20
|
height: 1200/4+20
|
||||||
paddings: 10
|
paddings: 10
|
||||||
Layout.topMargin: 10
|
Layout.topMargin: 10
|
||||||
FluRectangle{
|
FluClip{
|
||||||
width: 1920/4
|
width: 1920/4
|
||||||
height: 1200/4
|
height: 1200/4
|
||||||
radius:[15,15,15,15]
|
radius:[8,8,8,8]
|
||||||
Image {
|
Image {
|
||||||
id:image
|
id:image
|
||||||
asynchronous: true
|
asynchronous: true
|
||||||
|
@ -25,7 +25,7 @@ FluContentPage {
|
|||||||
leftMargin: 14
|
leftMargin: 14
|
||||||
}
|
}
|
||||||
onClicked: {
|
onClicked: {
|
||||||
grid_view.model = FluApp.awesomelist(text_box.text)
|
grid_view.model = FluTheme.awesomeList(text_box.text)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
GridView{
|
GridView{
|
||||||
@ -34,7 +34,7 @@ FluContentPage {
|
|||||||
cellHeight: 80
|
cellHeight: 80
|
||||||
clip: true
|
clip: true
|
||||||
boundsBehavior: GridView.StopAtBounds
|
boundsBehavior: GridView.StopAtBounds
|
||||||
model:FluApp.awesomelist()
|
model:FluTheme.awesomeList()
|
||||||
ScrollBar.vertical: FluScrollBar {}
|
ScrollBar.vertical: FluScrollBar {}
|
||||||
anchors{
|
anchors{
|
||||||
topMargin: 10
|
topMargin: 10
|
||||||
|
@ -161,6 +161,97 @@ FluScrollablePage{
|
|||||||
}'
|
}'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Timer{
|
||||||
|
id:timer_progress
|
||||||
|
interval: 200
|
||||||
|
onTriggered: {
|
||||||
|
btn_progress.progress = (btn_progress.progress + 0.1).toFixed(1)
|
||||||
|
if(btn_progress.progress==1){
|
||||||
|
timer_progress.stop()
|
||||||
|
}else{
|
||||||
|
timer_progress.start()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FluArea{
|
||||||
|
Layout.fillWidth: true
|
||||||
|
height: 68
|
||||||
|
Layout.topMargin: 20
|
||||||
|
paddings: 10
|
||||||
|
|
||||||
|
FluProgressButton{
|
||||||
|
id:btn_progress
|
||||||
|
disabled:progress_button_switch.checked
|
||||||
|
text:"Progress Button"
|
||||||
|
anchors{
|
||||||
|
verticalCenter: parent.verticalCenter
|
||||||
|
left: parent.left
|
||||||
|
}
|
||||||
|
onClicked: {
|
||||||
|
btn_progress.progress = 0
|
||||||
|
timer_progress.restart()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluToggleSwitch{
|
||||||
|
id:progress_button_switch
|
||||||
|
anchors{
|
||||||
|
right: parent.right
|
||||||
|
verticalCenter: parent.verticalCenter
|
||||||
|
}
|
||||||
|
text:"Disabled"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
CodeExpander{
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.topMargin: -1
|
||||||
|
code:'FluProgressButton{
|
||||||
|
text:"Progress Button"
|
||||||
|
onClicked: {
|
||||||
|
|
||||||
|
}
|
||||||
|
}'
|
||||||
|
}
|
||||||
|
|
||||||
|
FluArea{
|
||||||
|
Layout.fillWidth: true
|
||||||
|
height: 68
|
||||||
|
Layout.topMargin: 20
|
||||||
|
paddings: 10
|
||||||
|
|
||||||
|
FluLoadingButton{
|
||||||
|
id:btn_loading
|
||||||
|
loading:loading_button_switch.checked
|
||||||
|
text:"Loading Button"
|
||||||
|
anchors{
|
||||||
|
verticalCenter: parent.verticalCenter
|
||||||
|
left: parent.left
|
||||||
|
}
|
||||||
|
onClicked: {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluToggleSwitch{
|
||||||
|
id:loading_button_switch
|
||||||
|
checked: true
|
||||||
|
anchors{
|
||||||
|
right: parent.right
|
||||||
|
verticalCenter: parent.verticalCenter
|
||||||
|
}
|
||||||
|
text:"Loading"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
CodeExpander{
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.topMargin: -1
|
||||||
|
code:'FluLoadingButton{
|
||||||
|
text:"Loading Button"
|
||||||
|
onClicked: {
|
||||||
|
|
||||||
|
}
|
||||||
|
}'
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
FluArea{
|
FluArea{
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
|
@ -36,7 +36,7 @@ FluScrollablePage{
|
|||||||
left: parent.left
|
left: parent.left
|
||||||
}
|
}
|
||||||
FluCalendarPicker{
|
FluCalendarPicker{
|
||||||
current:Date.fromLocaleString("2013年7月11日 21:17:42")
|
current:new Date()
|
||||||
onAccepted:{
|
onAccepted:{
|
||||||
showSuccess(current.toLocaleString())
|
showSuccess(current.toLocaleString())
|
||||||
}
|
}
|
||||||
|
@ -9,10 +9,10 @@ FluScrollablePage{
|
|||||||
|
|
||||||
title:"Captcha"
|
title:"Captcha"
|
||||||
|
|
||||||
|
|
||||||
FluCaptcha{
|
FluCaptcha{
|
||||||
id:captcha
|
id:captcha
|
||||||
Layout.topMargin: 20
|
Layout.topMargin: 20
|
||||||
|
ignoreCase:switch_case.checked
|
||||||
MouseArea{
|
MouseArea{
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
cursorShape: Qt.PointingHandCursor
|
cursorShape: Qt.PointingHandCursor
|
||||||
@ -30,12 +30,20 @@ FluScrollablePage{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FluToggleSwitch{
|
||||||
|
id:switch_case
|
||||||
|
text:"Ignore Case"
|
||||||
|
checked: true
|
||||||
|
Layout.topMargin: 10
|
||||||
|
}
|
||||||
|
|
||||||
RowLayout{
|
RowLayout{
|
||||||
spacing: 10
|
spacing: 10
|
||||||
Layout.topMargin: 10
|
Layout.topMargin: 10
|
||||||
FluTextBox{
|
FluTextBox{
|
||||||
id:text_box
|
id:text_box
|
||||||
placeholderText: "请输入验证码"
|
placeholderText: "请输入验证码"
|
||||||
|
Layout.preferredWidth: 240
|
||||||
}
|
}
|
||||||
FluButton{
|
FluButton{
|
||||||
text:"verify"
|
text:"verify"
|
||||||
@ -49,6 +57,4 @@ FluScrollablePage{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -36,20 +36,27 @@ FluScrollablePage{
|
|||||||
FluText{
|
FluText{
|
||||||
text:"轮播图,支持无限轮播,无限滑动,用ListView实现的组件"
|
text:"轮播图,支持无限轮播,无限滑动,用ListView实现的组件"
|
||||||
}
|
}
|
||||||
FluCarousel{
|
Item{
|
||||||
radius:[5,5,5,5]
|
width: 400
|
||||||
delegate: Component{
|
height: 300
|
||||||
Image {
|
FluShadow{
|
||||||
anchors.fill: parent
|
radius: 8
|
||||||
source: model.url
|
|
||||||
asynchronous: true
|
|
||||||
fillMode:Image.PreserveAspectCrop
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
Layout.topMargin: 20
|
FluCarousel{
|
||||||
Layout.leftMargin: 5
|
anchors.fill: parent
|
||||||
Component.onCompleted: {
|
delegate: Component{
|
||||||
model = [{url:"qrc:/example/res/image/banner_1.jpg"},{url:"qrc:/example/res/image/banner_2.jpg"},{url:"qrc:/example/res/image/banner_3.jpg"}]
|
Image {
|
||||||
|
anchors.fill: parent
|
||||||
|
source: model.url
|
||||||
|
asynchronous: true
|
||||||
|
fillMode:Image.PreserveAspectCrop
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Layout.topMargin: 20
|
||||||
|
Layout.leftMargin: 5
|
||||||
|
Component.onCompleted: {
|
||||||
|
model = [{url:"qrc:/example/res/image/banner_1.jpg"},{url:"qrc:/example/res/image/banner_2.jpg"},{url:"qrc:/example/res/image/banner_3.jpg"}]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -66,46 +73,54 @@ FluScrollablePage{
|
|||||||
verticalCenter: parent.verticalCenter
|
verticalCenter: parent.verticalCenter
|
||||||
left:parent.left
|
left:parent.left
|
||||||
}
|
}
|
||||||
FluCarousel{
|
Item{
|
||||||
radius:[15,15,15,15]
|
width: 400
|
||||||
loopTime:1500
|
height: 300
|
||||||
indicatorGravity: Qt.AlignHCenter | Qt.AlignTop
|
FluShadow{
|
||||||
indicatorMarginTop:15
|
radius: 8
|
||||||
delegate: Component{
|
}
|
||||||
Item{
|
FluCarousel{
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
Image {
|
loopTime:1500
|
||||||
|
indicatorGravity: Qt.AlignHCenter | Qt.AlignTop
|
||||||
|
indicatorMarginTop:15
|
||||||
|
delegate: Component{
|
||||||
|
Item{
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
source: model.url
|
Image {
|
||||||
asynchronous: true
|
|
||||||
fillMode:Image.PreserveAspectCrop
|
|
||||||
}
|
|
||||||
Rectangle{
|
|
||||||
height: 40
|
|
||||||
width: parent.width
|
|
||||||
anchors.bottom: parent.bottom
|
|
||||||
color: "#33000000"
|
|
||||||
FluText{
|
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
verticalAlignment: Qt.AlignVCenter
|
source: model.url
|
||||||
horizontalAlignment: Qt.AlignHCenter
|
asynchronous: true
|
||||||
text:model.title
|
fillMode:Image.PreserveAspectCrop
|
||||||
color: FluColors.Grey10
|
}
|
||||||
font.pixelSize: 15
|
Rectangle{
|
||||||
|
height: 40
|
||||||
|
width: parent.width
|
||||||
|
anchors.bottom: parent.bottom
|
||||||
|
color: "#33000000"
|
||||||
|
FluText{
|
||||||
|
anchors.fill: parent
|
||||||
|
verticalAlignment: Qt.AlignVCenter
|
||||||
|
horizontalAlignment: Qt.AlignHCenter
|
||||||
|
text:model.title
|
||||||
|
color: FluColors.Grey10
|
||||||
|
font.pixelSize: 15
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
Layout.topMargin: 20
|
||||||
Layout.topMargin: 20
|
Layout.leftMargin: 5
|
||||||
Layout.leftMargin: 5
|
Component.onCompleted: {
|
||||||
Component.onCompleted: {
|
var arr = []
|
||||||
var arr = []
|
arr.push({url:"qrc:/example/res/image/banner_1.jpg",title:"共同应对全球性问题"})
|
||||||
arr.push({url:"qrc:/example/res/image/banner_1.jpg",title:"共同应对全球性问题"})
|
arr.push({url:"qrc:/example/res/image/banner_2.jpg",title:"三小只全程没互动"})
|
||||||
arr.push({url:"qrc:/example/res/image/banner_2.jpg",title:"三小只全程没互动"})
|
arr.push({url:"qrc:/example/res/image/banner_3.jpg",title:"有效投资扩大 激发增长动能"})
|
||||||
arr.push({url:"qrc:/example/res/image/banner_3.jpg",title:"有效投资扩大 激发增长动能"})
|
model = arr
|
||||||
model = arr
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11,27 +11,35 @@ FluScrollablePage{
|
|||||||
|
|
||||||
FluArea{
|
FluArea{
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
height: 68
|
height: 72
|
||||||
paddings: 10
|
paddings: 10
|
||||||
Layout.topMargin: 20
|
Layout.topMargin: 20
|
||||||
|
|
||||||
|
FluText{
|
||||||
|
text:"A 2-state CheckBox"
|
||||||
|
}
|
||||||
|
|
||||||
Row{
|
Row{
|
||||||
spacing: 30
|
spacing: 30
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
anchors{
|
||||||
FluCheckBox{
|
top: parent.top
|
||||||
disabled: check_box_switch.checked
|
topMargin: 30
|
||||||
}
|
}
|
||||||
FluCheckBox{
|
FluCheckBox{
|
||||||
disabled: check_box_switch.checked
|
disabled: check_box_switch_two.checked
|
||||||
|
}
|
||||||
|
FluCheckBox{
|
||||||
|
disabled: check_box_switch_two.checked
|
||||||
text:"Right"
|
text:"Right"
|
||||||
}
|
}
|
||||||
FluCheckBox{
|
FluCheckBox{
|
||||||
disabled: check_box_switch.checked
|
disabled: check_box_switch_two.checked
|
||||||
text:"Left"
|
text:"Left"
|
||||||
textRight: false
|
textRight: false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
FluToggleSwitch{
|
FluToggleSwitch{
|
||||||
id:check_box_switch
|
id:check_box_switch_two
|
||||||
anchors{
|
anchors{
|
||||||
right: parent.right
|
right: parent.right
|
||||||
verticalCenter: parent.verticalCenter
|
verticalCenter: parent.verticalCenter
|
||||||
@ -47,4 +55,60 @@ FluScrollablePage{
|
|||||||
}'
|
}'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FluArea{
|
||||||
|
Layout.fillWidth: true
|
||||||
|
height: 72
|
||||||
|
paddings: 10
|
||||||
|
Layout.topMargin: 20
|
||||||
|
|
||||||
|
FluText{
|
||||||
|
text:"A 3-state CheckBox"
|
||||||
|
}
|
||||||
|
|
||||||
|
Row{
|
||||||
|
spacing: 30
|
||||||
|
anchors{
|
||||||
|
top: parent.top
|
||||||
|
topMargin: 30
|
||||||
|
}
|
||||||
|
FluCheckBox{
|
||||||
|
property int count: 1
|
||||||
|
text:"Three State"
|
||||||
|
disabled: check_box_switch_three.checked
|
||||||
|
clickListener: function(){
|
||||||
|
var flag = count%3
|
||||||
|
if(flag === 0){
|
||||||
|
checked = false
|
||||||
|
indeterminate = false
|
||||||
|
}
|
||||||
|
if(flag === 1){
|
||||||
|
checked = true
|
||||||
|
indeterminate = false
|
||||||
|
}
|
||||||
|
if(flag === 2){
|
||||||
|
checked = true
|
||||||
|
indeterminate = true
|
||||||
|
}
|
||||||
|
count++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluToggleSwitch{
|
||||||
|
id:check_box_switch_three
|
||||||
|
anchors{
|
||||||
|
right: parent.right
|
||||||
|
verticalCenter: parent.verticalCenter
|
||||||
|
}
|
||||||
|
text:"Disabled"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
CodeExpander{
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.topMargin: -1
|
||||||
|
code:'FluCheckBox{
|
||||||
|
text:"Text"
|
||||||
|
indeterminate:true
|
||||||
|
}'
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
107
example/qml-Qt6/page/T_Clip.qml
Normal file
107
example/qml-Qt6/page/T_Clip.qml
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
import QtQuick
|
||||||
|
import QtQuick.Layouts
|
||||||
|
import QtQuick.Controls
|
||||||
|
import QtQuick.Window
|
||||||
|
import FluentUI
|
||||||
|
import "qrc:///example/qml/component"
|
||||||
|
|
||||||
|
FluScrollablePage{
|
||||||
|
|
||||||
|
title:"Clip"
|
||||||
|
|
||||||
|
FluArea{
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.topMargin: 20
|
||||||
|
height: 380
|
||||||
|
paddings: 10
|
||||||
|
|
||||||
|
Column{
|
||||||
|
spacing: 15
|
||||||
|
anchors{
|
||||||
|
verticalCenter: parent.verticalCenter
|
||||||
|
left: parent.left
|
||||||
|
}
|
||||||
|
FluText{
|
||||||
|
text:"配合图片使用(software渲染下该组件将没有效果)"
|
||||||
|
font: FluTextStyle.Subtitle
|
||||||
|
Layout.topMargin: 20
|
||||||
|
}
|
||||||
|
RowLayout{
|
||||||
|
spacing: 14
|
||||||
|
FluClip{
|
||||||
|
width: 50
|
||||||
|
height: 50
|
||||||
|
radius:[25,0,25,25]
|
||||||
|
Image {
|
||||||
|
asynchronous: true
|
||||||
|
anchors.fill: parent
|
||||||
|
source: "qrc:/example/res/svg/avatar_1.svg"
|
||||||
|
sourceSize: Qt.size(width,height)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluClip{
|
||||||
|
width: 50
|
||||||
|
height: 50
|
||||||
|
radius:[10,10,10,10]
|
||||||
|
Image {
|
||||||
|
asynchronous: true
|
||||||
|
anchors.fill: parent
|
||||||
|
sourceSize: Qt.size(width,height)
|
||||||
|
source: "qrc:/example/res/svg/avatar_2.svg"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluClip{
|
||||||
|
width: 50
|
||||||
|
height: 50
|
||||||
|
radius:[25,25,25,25]
|
||||||
|
Image {
|
||||||
|
asynchronous: true
|
||||||
|
anchors.fill: parent
|
||||||
|
sourceSize: Qt.size(width,height)
|
||||||
|
source: "qrc:/example/res/svg/avatar_3.svg"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluClip{
|
||||||
|
width: 50
|
||||||
|
height: 50
|
||||||
|
radius:[0,25,25,25]
|
||||||
|
Image {
|
||||||
|
asynchronous: true
|
||||||
|
anchors.fill: parent
|
||||||
|
sourceSize: Qt.size(width,height)
|
||||||
|
source: "qrc:/example/res/svg/avatar_4.svg"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluClip{
|
||||||
|
width: 1920/5
|
||||||
|
height: 1200/5
|
||||||
|
radius:[8,8,8,8]
|
||||||
|
Image {
|
||||||
|
asynchronous: true
|
||||||
|
source: "qrc:/example/res/image/banner_1.jpg"
|
||||||
|
anchors.fill: parent
|
||||||
|
sourceSize: Qt.size(2*width,2*height)
|
||||||
|
}
|
||||||
|
Layout.topMargin: 20
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
CodeExpander{
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.topMargin: -1
|
||||||
|
code:'FluClip{
|
||||||
|
radius: [25,25,25,25]
|
||||||
|
width: 50
|
||||||
|
height: 50
|
||||||
|
Image{
|
||||||
|
asynchronous: true
|
||||||
|
anchors.fill: parent
|
||||||
|
source: "qrc:/example/res/svg/avatar_4.svg"
|
||||||
|
sourceSize: Qt.size(width,height)
|
||||||
|
}
|
||||||
|
}'
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -46,7 +46,6 @@ FluScrollablePage{
|
|||||||
}
|
}
|
||||||
FluComboBox {
|
FluComboBox {
|
||||||
editable: true
|
editable: true
|
||||||
font:FluTextStyle.BodyStrong
|
|
||||||
model: ListModel {
|
model: ListModel {
|
||||||
id: model_2
|
id: model_2
|
||||||
ListElement { text: "Banana" }
|
ListElement { text: "Banana" }
|
||||||
|
@ -115,4 +115,68 @@ FluScrollablePage{
|
|||||||
showSuccess("点击最小化按钮")
|
showSuccess("点击最小化按钮")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FluArea{
|
||||||
|
Layout.fillWidth: true
|
||||||
|
height: 68
|
||||||
|
paddings: 10
|
||||||
|
Layout.topMargin: 20
|
||||||
|
FluButton{
|
||||||
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
Layout.topMargin: 20
|
||||||
|
text:"Custom Content Dialog"
|
||||||
|
onClicked: {
|
||||||
|
custom_btn_dialog.open()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
CodeExpander{
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.topMargin: -1
|
||||||
|
code:'FluContentDialog{
|
||||||
|
id:dialog
|
||||||
|
title:"友情提示"
|
||||||
|
message:"数据正在加载中,请稍等..."
|
||||||
|
negativeText:"取消加载"
|
||||||
|
contentDelegate: Component{
|
||||||
|
Item{
|
||||||
|
width: parent.width
|
||||||
|
height: 80
|
||||||
|
FluProgressRing{
|
||||||
|
anchors.centerIn: parent
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
onNegativeClicked:{
|
||||||
|
showSuccess("点击取消按钮")
|
||||||
|
}
|
||||||
|
positiveText:"确定"
|
||||||
|
onPositiveClicked:{
|
||||||
|
showSuccess("点击确定按钮")
|
||||||
|
}
|
||||||
|
dialog.open()'
|
||||||
|
}
|
||||||
|
|
||||||
|
FluContentDialog{
|
||||||
|
id:custom_btn_dialog
|
||||||
|
title:"友情提示"
|
||||||
|
message:"数据正在加载中,请稍等..."
|
||||||
|
negativeText:"取消加载"
|
||||||
|
contentDelegate: Component{
|
||||||
|
Item{
|
||||||
|
width: parent.width
|
||||||
|
height: 80
|
||||||
|
FluProgressRing{
|
||||||
|
anchors.centerIn: parent
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
onNegativeClicked:{
|
||||||
|
showSuccess("点击取消按钮")
|
||||||
|
}
|
||||||
|
positiveText:"确定"
|
||||||
|
onPositiveClicked:{
|
||||||
|
showSuccess("点击确定按钮")
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -58,6 +58,7 @@ FluScrollablePage{
|
|||||||
width: parent.width
|
width: parent.width
|
||||||
height: parent.height
|
height: parent.height
|
||||||
contentWidth: width
|
contentWidth: width
|
||||||
|
boundsBehavior: Flickable.StopAtBounds
|
||||||
contentHeight: text_info.height
|
contentHeight: text_info.height
|
||||||
ScrollBar.vertical: FluScrollBar {}
|
ScrollBar.vertical: FluScrollBar {}
|
||||||
FluText{
|
FluText{
|
||||||
|
@ -27,7 +27,9 @@ FluScrollablePage{
|
|||||||
id: bg
|
id: bg
|
||||||
fillMode:Image.PreserveAspectCrop
|
fillMode:Image.PreserveAspectCrop
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
|
asynchronous: true
|
||||||
verticalAlignment: Qt.AlignTop
|
verticalAlignment: Qt.AlignTop
|
||||||
|
sourceSize: Qt.size(960,640)
|
||||||
source: "qrc:/example/res/image/bg_home_header.png"
|
source: "qrc:/example/res/image/bg_home_header.png"
|
||||||
}
|
}
|
||||||
Rectangle{
|
Rectangle{
|
||||||
@ -48,33 +50,19 @@ FluScrollablePage{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ListView{
|
Component{
|
||||||
id: list
|
id:com_grallery
|
||||||
anchors{
|
Item{
|
||||||
left: parent.left
|
|
||||||
right: parent.right
|
|
||||||
bottom: parent.bottom
|
|
||||||
}
|
|
||||||
orientation: ListView.Horizontal
|
|
||||||
height: 240
|
|
||||||
model: model_header
|
|
||||||
header: Item{height: 10;width: 10}
|
|
||||||
footer: Item{height: 10;width: 10}
|
|
||||||
ScrollBar.horizontal: FluScrollBar{
|
|
||||||
id: scrollbar_header
|
|
||||||
}
|
|
||||||
clip: false
|
|
||||||
delegate:Item{
|
|
||||||
id: control
|
id: control
|
||||||
width: 220
|
width: 220
|
||||||
height: 240
|
height: 240
|
||||||
FluShadow{
|
FluShadow{
|
||||||
radius:8
|
radius:5
|
||||||
anchors.fill: item_content
|
anchors.fill: item_content
|
||||||
}
|
}
|
||||||
FluItem{
|
FluClip{
|
||||||
id:item_content
|
id:item_content
|
||||||
radius: [8,8,8,8]
|
radius: [5,5,5,5]
|
||||||
width: 200
|
width: 200
|
||||||
height: 220
|
height: 220
|
||||||
anchors.centerIn: parent
|
anchors.centerIn: parent
|
||||||
@ -88,20 +76,15 @@ FluScrollablePage{
|
|||||||
}
|
}
|
||||||
Rectangle{
|
Rectangle{
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
radius: 8
|
radius: 5
|
||||||
color:{
|
color:FluTheme.itemHoverColor
|
||||||
if(FluTheme.dark){
|
visible: item_mouse.containsMouse
|
||||||
if(item_mouse.containsMouse){
|
}
|
||||||
return Qt.rgba(1,1,1,0.03)
|
Rectangle{
|
||||||
}
|
anchors.fill: parent
|
||||||
return Qt.rgba(0,0,0,0.0)
|
radius: 5
|
||||||
}else{
|
color:Qt.rgba(0,0,0,0.0)
|
||||||
if(item_mouse.containsMouse){
|
visible: !item_mouse.containsMouse
|
||||||
return Qt.rgba(0,0,0,0.03)
|
|
||||||
}
|
|
||||||
return Qt.rgba(0,0,0,0.0)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
ColumnLayout{
|
ColumnLayout{
|
||||||
Image {
|
Image {
|
||||||
@ -153,11 +136,31 @@ FluScrollablePage{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ListView{
|
||||||
|
id: list
|
||||||
|
anchors{
|
||||||
|
left: parent.left
|
||||||
|
right: parent.right
|
||||||
|
bottom: parent.bottom
|
||||||
|
}
|
||||||
|
orientation: ListView.Horizontal
|
||||||
|
height: 240
|
||||||
|
model: model_header
|
||||||
|
header: Item{height: 10;width: 10}
|
||||||
|
footer: Item{height: 10;width: 10}
|
||||||
|
ScrollBar.horizontal: FluScrollBar{
|
||||||
|
id: scrollbar_header
|
||||||
|
}
|
||||||
|
clip: false
|
||||||
|
delegate: com_grallery
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Component{
|
Component{
|
||||||
id:com_item
|
id:com_item
|
||||||
Item{
|
Item{
|
||||||
|
property string desc: modelData.desc
|
||||||
width: 320
|
width: 320
|
||||||
height: 120
|
height: 120
|
||||||
FluArea{
|
FluArea{
|
||||||
@ -169,17 +172,10 @@ FluScrollablePage{
|
|||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
radius: 8
|
radius: 8
|
||||||
color:{
|
color:{
|
||||||
if(FluTheme.dark){
|
if(item_mouse.containsMouse){
|
||||||
if(item_mouse.containsMouse){
|
return FluTheme.itemHoverColor
|
||||||
return Qt.rgba(1,1,1,0.03)
|
|
||||||
}
|
|
||||||
return Qt.rgba(0,0,0,0)
|
|
||||||
}else{
|
|
||||||
if(item_mouse.containsMouse){
|
|
||||||
return Qt.rgba(0,0,0,0.03)
|
|
||||||
}
|
|
||||||
return Qt.rgba(0,0,0,0)
|
|
||||||
}
|
}
|
||||||
|
return FluTheme.itemNormalColor
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Image{
|
Image{
|
||||||
@ -193,7 +189,6 @@ FluScrollablePage{
|
|||||||
verticalCenter: parent.verticalCenter
|
verticalCenter: parent.verticalCenter
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FluText{
|
FluText{
|
||||||
id:item_title
|
id:item_title
|
||||||
text:modelData.title
|
text:modelData.title
|
||||||
@ -204,10 +199,9 @@ FluScrollablePage{
|
|||||||
top: item_icon.top
|
top: item_icon.top
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FluText{
|
FluText{
|
||||||
id:item_desc
|
id:item_desc
|
||||||
text:modelData.desc
|
text:desc
|
||||||
color:FluColors.Grey120
|
color:FluColors.Grey120
|
||||||
wrapMode: Text.WrapAnywhere
|
wrapMode: Text.WrapAnywhere
|
||||||
elide: Text.ElideRight
|
elide: Text.ElideRight
|
||||||
@ -226,7 +220,7 @@ FluScrollablePage{
|
|||||||
height: 12
|
height: 12
|
||||||
width: 12
|
width: 12
|
||||||
radius: 6
|
radius: 6
|
||||||
color: FluTheme.primaryColor.dark
|
color: FluTheme.primaryColor
|
||||||
anchors{
|
anchors{
|
||||||
right: parent.right
|
right: parent.right
|
||||||
top: parent.top
|
top: parent.top
|
||||||
|
@ -1,279 +0,0 @@
|
|||||||
import QtQuick
|
|
||||||
import Qt.labs.platform
|
|
||||||
import QtQuick.Layouts
|
|
||||||
import QtQuick.Window
|
|
||||||
import QtQuick.Controls
|
|
||||||
import QtQuick.Dialogs
|
|
||||||
import FluentUI
|
|
||||||
import "qrc:///example/qml/component"
|
|
||||||
|
|
||||||
FluContentPage{
|
|
||||||
|
|
||||||
title:"Http"
|
|
||||||
|
|
||||||
FluHttp{
|
|
||||||
id:http
|
|
||||||
}
|
|
||||||
|
|
||||||
Flickable{
|
|
||||||
id:layout_flick
|
|
||||||
width: 160
|
|
||||||
clip: true
|
|
||||||
anchors{
|
|
||||||
top: parent.top
|
|
||||||
topMargin: 20
|
|
||||||
bottom: parent.bottom
|
|
||||||
left: parent.left
|
|
||||||
}
|
|
||||||
ScrollBar.vertical: FluScrollBar {}
|
|
||||||
contentHeight:layout_column.height
|
|
||||||
Column{
|
|
||||||
spacing: 2
|
|
||||||
id:layout_column
|
|
||||||
width: parent.width
|
|
||||||
FluButton{
|
|
||||||
implicitWidth: parent.width
|
|
||||||
implicitHeight: 36
|
|
||||||
text: "Get请求"
|
|
||||||
onClicked: {
|
|
||||||
var callable = {}
|
|
||||||
callable.onStart = function(){
|
|
||||||
showLoading()
|
|
||||||
}
|
|
||||||
callable.onFinish = function(){
|
|
||||||
hideLoading()
|
|
||||||
}
|
|
||||||
callable.onSuccess = function(result){
|
|
||||||
text_info.text = result
|
|
||||||
console.debug(result)
|
|
||||||
}
|
|
||||||
callable.onError = function(status,errorString){
|
|
||||||
console.debug(status+";"+errorString)
|
|
||||||
}
|
|
||||||
http.get("https://httpbingo.org/get",callable)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
FluButton{
|
|
||||||
implicitWidth: parent.width
|
|
||||||
implicitHeight: 36
|
|
||||||
text: "Post表单请求"
|
|
||||||
onClicked: {
|
|
||||||
var callable = {}
|
|
||||||
callable.onStart = function(){
|
|
||||||
showLoading()
|
|
||||||
}
|
|
||||||
callable.onFinish = function(){
|
|
||||||
hideLoading()
|
|
||||||
}
|
|
||||||
callable.onSuccess = function(result){
|
|
||||||
text_info.text = result
|
|
||||||
console.debug(result)
|
|
||||||
}
|
|
||||||
callable.onError = function(status,errorString){
|
|
||||||
console.debug(status+";"+errorString)
|
|
||||||
}
|
|
||||||
var param = {}
|
|
||||||
param.custname = "朱子楚"
|
|
||||||
param.custtel = "1234567890"
|
|
||||||
param.custemail = "zhuzichu520@gmail.com"
|
|
||||||
http.post("https://httpbingo.org/post",callable,param)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
FluButton{
|
|
||||||
implicitWidth: parent.width
|
|
||||||
implicitHeight: 36
|
|
||||||
text: "Post Json请求"
|
|
||||||
onClicked: {
|
|
||||||
var callable = {}
|
|
||||||
callable.onStart = function(){
|
|
||||||
showLoading()
|
|
||||||
}
|
|
||||||
callable.onFinish = function(){
|
|
||||||
hideLoading()
|
|
||||||
}
|
|
||||||
callable.onSuccess = function(result){
|
|
||||||
text_info.text = result
|
|
||||||
console.debug(result)
|
|
||||||
}
|
|
||||||
callable.onError = function(status,errorString){
|
|
||||||
console.debug(status+";"+errorString)
|
|
||||||
}
|
|
||||||
var param = {}
|
|
||||||
param.custname = "朱子楚"
|
|
||||||
param.custtel = "1234567890"
|
|
||||||
param.custemail = "zhuzichu520@gmail.com"
|
|
||||||
http.postJson("https://httpbingo.org/post",callable,param)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
FluButton{
|
|
||||||
implicitWidth: parent.width
|
|
||||||
implicitHeight: 36
|
|
||||||
text: "Post String请求"
|
|
||||||
onClicked: {
|
|
||||||
var callable = {}
|
|
||||||
callable.onStart = function(){
|
|
||||||
showLoading()
|
|
||||||
}
|
|
||||||
callable.onFinish = function(){
|
|
||||||
hideLoading()
|
|
||||||
}
|
|
||||||
callable.onSuccess = function(result){
|
|
||||||
text_info.text = result
|
|
||||||
console.debug(result)
|
|
||||||
}
|
|
||||||
callable.onError = function(status,errorString){
|
|
||||||
console.debug(status+";"+errorString)
|
|
||||||
}
|
|
||||||
var param = "我命由我不由天"
|
|
||||||
http.postString("https://httpbingo.org/post",callable,param)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
FluButton{
|
|
||||||
id:btn_download
|
|
||||||
implicitWidth: parent.width
|
|
||||||
implicitHeight: 36
|
|
||||||
text: "下载文件"
|
|
||||||
onClicked: {
|
|
||||||
folder_dialog.open()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
FluButton{
|
|
||||||
id:btn_upload
|
|
||||||
implicitWidth: parent.width
|
|
||||||
implicitHeight: 36
|
|
||||||
text: "文件上传"
|
|
||||||
onClicked: {
|
|
||||||
file_dialog.open()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
FileDialog {
|
|
||||||
id: file_dialog
|
|
||||||
onAccepted: {
|
|
||||||
var param = {}
|
|
||||||
for(var i=0;i<selectedFiles.length;i++){
|
|
||||||
var fileUrl = selectedFiles[i]
|
|
||||||
var fileName = FluTools.getFileNameByUrl(fileUrl)
|
|
||||||
var filePath = FluTools.toLocalPath(fileUrl)
|
|
||||||
param[fileName] = filePath
|
|
||||||
}
|
|
||||||
console.debug(JSON.stringify(param))
|
|
||||||
var callable = {}
|
|
||||||
callable.onStart = function(){
|
|
||||||
btn_upload.disabled = true
|
|
||||||
}
|
|
||||||
callable.onFinish = function(){
|
|
||||||
btn_upload.disabled = false
|
|
||||||
btn_upload.text = "上传文件"
|
|
||||||
layout_upload_file_size.visible = false
|
|
||||||
text_upload_file_size.text = ""
|
|
||||||
}
|
|
||||||
callable.onSuccess = function(result){
|
|
||||||
text_info.text = result
|
|
||||||
console.debug(result)
|
|
||||||
}
|
|
||||||
callable.onError = function(status,errorString,result){
|
|
||||||
text_info.text = result
|
|
||||||
console.debug(result)
|
|
||||||
}
|
|
||||||
callable.onUploadProgress = function(sent,total){
|
|
||||||
var locale = Qt.locale()
|
|
||||||
var precent = (sent/total * 100).toFixed(0) + "%"
|
|
||||||
btn_upload.text = "上传中..."+precent
|
|
||||||
text_upload_file_size.text = "%1/%2".arg(locale.formattedDataSize(sent)).arg(locale.formattedDataSize(total))
|
|
||||||
layout_upload_file_size.visible = true
|
|
||||||
}
|
|
||||||
http.upload("https://httpbingo.org/post",callable,param)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
FolderDialog {
|
|
||||||
id: folder_dialog
|
|
||||||
currentFolder: StandardPaths.standardLocations(StandardPaths.DownloadLocation)[0]
|
|
||||||
onAccepted: {
|
|
||||||
var callable = {}
|
|
||||||
callable.onStart = function(){
|
|
||||||
btn_download.disabled = true
|
|
||||||
}
|
|
||||||
callable.onFinish = function(){
|
|
||||||
btn_download.disabled = false
|
|
||||||
btn_download.text = "下载文件"
|
|
||||||
layout_download_file_size.visible = false
|
|
||||||
text_download_file_size.text = ""
|
|
||||||
}
|
|
||||||
callable.onSuccess = function(result){
|
|
||||||
showSuccess(result)
|
|
||||||
}
|
|
||||||
callable.onError = function(status,errorString){
|
|
||||||
showError(errorString)
|
|
||||||
}
|
|
||||||
callable.onDownloadProgress = function(recv,total){
|
|
||||||
var locale = Qt.locale()
|
|
||||||
var precent = (recv/total * 100).toFixed(0) + "%"
|
|
||||||
btn_download.text = "下载中..."+precent
|
|
||||||
text_download_file_size.text = "%1/%2".arg(locale.formattedDataSize(recv)).arg(locale.formattedDataSize(total))
|
|
||||||
layout_download_file_size.visible = true
|
|
||||||
}
|
|
||||||
var path = FluTools.toLocalPath(currentFolder)+ "/big_buck_bunny.mp4"
|
|
||||||
http.download("http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4",callable,path)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
FluArea{
|
|
||||||
anchors{
|
|
||||||
top: layout_flick.top
|
|
||||||
bottom: layout_flick.bottom
|
|
||||||
left: layout_flick.right
|
|
||||||
right: parent.right
|
|
||||||
leftMargin: 8
|
|
||||||
}
|
|
||||||
Flickable{
|
|
||||||
clip: true
|
|
||||||
id:scrollview
|
|
||||||
boundsBehavior:Flickable.StopAtBounds
|
|
||||||
width: parent.width
|
|
||||||
height: parent.height
|
|
||||||
contentWidth: width
|
|
||||||
contentHeight: text_info.height
|
|
||||||
ScrollBar.vertical: FluScrollBar {}
|
|
||||||
FluText{
|
|
||||||
id:text_info
|
|
||||||
width: scrollview.width
|
|
||||||
wrapMode: Text.WrapAnywhere
|
|
||||||
padding: 14
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
FluRectangle{
|
|
||||||
id:layout_download_file_size
|
|
||||||
radius: [4,4,4,4]
|
|
||||||
height: 36
|
|
||||||
width: 160
|
|
||||||
visible: false
|
|
||||||
x:layout_flick.width
|
|
||||||
y: 173 - layout_flick.contentY
|
|
||||||
FluText{
|
|
||||||
id:text_download_file_size
|
|
||||||
anchors.centerIn: parent
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
FluRectangle{
|
|
||||||
id:layout_upload_file_size
|
|
||||||
radius: [4,4,4,4]
|
|
||||||
height: 36
|
|
||||||
width: 160
|
|
||||||
visible: false
|
|
||||||
x:layout_flick.width
|
|
||||||
y: 210 - layout_flick.contentY
|
|
||||||
FluText{
|
|
||||||
id:text_upload_file_size
|
|
||||||
anchors.centerIn: parent
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -12,7 +12,7 @@ FluScrollablePage{
|
|||||||
FluArea{
|
FluArea{
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.topMargin: 20
|
Layout.topMargin: 20
|
||||||
height: 240
|
height: 270
|
||||||
paddings: 10
|
paddings: 10
|
||||||
ColumnLayout{
|
ColumnLayout{
|
||||||
spacing: 14
|
spacing: 14
|
||||||
@ -44,6 +44,12 @@ FluScrollablePage{
|
|||||||
showSuccess("这是一个Success样式的InfoBar这是一个Success样式的InfoBar")
|
showSuccess("这是一个Success样式的InfoBar这是一个Success样式的InfoBar")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
FluButton{
|
||||||
|
text:"手动关闭的InfoBar"
|
||||||
|
onClicked: {
|
||||||
|
showInfo("这是一个Info样式的InfoBar",0,"支持手动关闭")
|
||||||
|
}
|
||||||
|
}
|
||||||
FluButton{
|
FluButton{
|
||||||
text:"Loading"
|
text:"Loading"
|
||||||
onClicked: {
|
onClicked: {
|
||||||
|
531
example/qml-Qt6/page/T_Network.qml
Normal file
531
example/qml-Qt6/page/T_Network.qml
Normal file
@ -0,0 +1,531 @@
|
|||||||
|
import QtQuick
|
||||||
|
import QtQuick.Layouts
|
||||||
|
import QtQuick.Window
|
||||||
|
import QtQuick.Controls
|
||||||
|
import FluentUI
|
||||||
|
import Qt.labs.platform
|
||||||
|
import "qrc:///example/qml/component"
|
||||||
|
|
||||||
|
FluContentPage{
|
||||||
|
|
||||||
|
id:root
|
||||||
|
title:"Network"
|
||||||
|
|
||||||
|
FluNetworkCallable{
|
||||||
|
id:callable
|
||||||
|
onStart: {
|
||||||
|
showLoading()
|
||||||
|
}
|
||||||
|
onFinish: {
|
||||||
|
hideLoading()
|
||||||
|
}
|
||||||
|
onError:
|
||||||
|
(status,errorString,result)=>{
|
||||||
|
console.debug(status+";"+errorString+";"+result)
|
||||||
|
}
|
||||||
|
onCache:
|
||||||
|
(result)=>{
|
||||||
|
text_info.text = result
|
||||||
|
}
|
||||||
|
onSuccess:
|
||||||
|
(result)=>{
|
||||||
|
text_info.text = result
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Flickable{
|
||||||
|
id:layout_flick
|
||||||
|
width: 200
|
||||||
|
clip: true
|
||||||
|
anchors{
|
||||||
|
top: parent.top
|
||||||
|
topMargin: 20
|
||||||
|
bottom: parent.bottom
|
||||||
|
left: parent.left
|
||||||
|
}
|
||||||
|
boundsBehavior: Flickable.StopAtBounds
|
||||||
|
ScrollBar.vertical: FluScrollBar {}
|
||||||
|
contentHeight:layout_column.height
|
||||||
|
Column{
|
||||||
|
spacing: 2
|
||||||
|
id:layout_column
|
||||||
|
width: parent.width
|
||||||
|
FluButton{
|
||||||
|
implicitWidth: parent.width
|
||||||
|
implicitHeight: 36
|
||||||
|
text: "Get"
|
||||||
|
onClicked: {
|
||||||
|
text_info.text = ""
|
||||||
|
FluNetwork.get("https://httpbingo.org/get")
|
||||||
|
.addQuery("name","孙悟空")
|
||||||
|
.addQuery("age",500)
|
||||||
|
.addQuery("address","花果山水帘洞")
|
||||||
|
.bind(root)
|
||||||
|
.go(callable)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluButton{
|
||||||
|
implicitWidth: parent.width
|
||||||
|
implicitHeight: 36
|
||||||
|
text: "Post Body"
|
||||||
|
onClicked: {
|
||||||
|
text_info.text = ""
|
||||||
|
FluNetwork.postBody("https://httpbingo.org/post")
|
||||||
|
.setBody("花果山水帘洞美猴王齐天大圣孙悟空")
|
||||||
|
.bind(root)
|
||||||
|
.go(callable)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluButton{
|
||||||
|
implicitWidth: parent.width
|
||||||
|
implicitHeight: 36
|
||||||
|
text: "Post Form"
|
||||||
|
onClicked: {
|
||||||
|
text_info.text = ""
|
||||||
|
FluNetwork.postForm("https://httpbingo.org/post")
|
||||||
|
.add("name","孙悟空")
|
||||||
|
.add("age",500)
|
||||||
|
.add("address","花果山水帘洞")
|
||||||
|
.bind(root)
|
||||||
|
.go(callable)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluButton{
|
||||||
|
implicitWidth: parent.width
|
||||||
|
implicitHeight: 36
|
||||||
|
text: "Post JSON"
|
||||||
|
onClicked: {
|
||||||
|
text_info.text = ""
|
||||||
|
FluNetwork.postJson("https://httpbingo.org/post")
|
||||||
|
.add("name","孙悟空")
|
||||||
|
.add("age",500)
|
||||||
|
.add("address","花果山水帘洞")
|
||||||
|
.bind(root)
|
||||||
|
.go(callable)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluButton{
|
||||||
|
implicitWidth: parent.width
|
||||||
|
implicitHeight: 36
|
||||||
|
text: "Post JSON Array"
|
||||||
|
onClicked: {
|
||||||
|
text_info.text = ""
|
||||||
|
FluNetwork.postJsonArray("https://httpbingo.org/post")
|
||||||
|
.add("name","孙悟空")
|
||||||
|
.add("age",500)
|
||||||
|
.add("address","花果山水帘洞")
|
||||||
|
.bind(root)
|
||||||
|
.go(callable)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluButton{
|
||||||
|
implicitWidth: parent.width
|
||||||
|
implicitHeight: 36
|
||||||
|
text: "Put Body"
|
||||||
|
onClicked: {
|
||||||
|
text_info.text = ""
|
||||||
|
FluNetwork.putBody("https://httpbingo.org/put")
|
||||||
|
.setBody("花果山水帘洞美猴王齐天大圣孙悟空")
|
||||||
|
.bind(root)
|
||||||
|
.go(callable)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluButton{
|
||||||
|
implicitWidth: parent.width
|
||||||
|
implicitHeight: 36
|
||||||
|
text: "Put Form"
|
||||||
|
onClicked: {
|
||||||
|
text_info.text = ""
|
||||||
|
FluNetwork.putForm("https://httpbingo.org/put")
|
||||||
|
.add("name","孙悟空")
|
||||||
|
.add("age",500)
|
||||||
|
.add("address","花果山水帘洞")
|
||||||
|
.bind(root)
|
||||||
|
.go(callable)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluButton{
|
||||||
|
implicitWidth: parent.width
|
||||||
|
implicitHeight: 36
|
||||||
|
text: "Put JSON"
|
||||||
|
onClicked: {
|
||||||
|
text_info.text = ""
|
||||||
|
FluNetwork.putJson("https://httpbingo.org/put")
|
||||||
|
.add("name","孙悟空")
|
||||||
|
.add("age",500)
|
||||||
|
.add("address","花果山水帘洞")
|
||||||
|
.bind(root)
|
||||||
|
.go(callable)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluButton{
|
||||||
|
implicitWidth: parent.width
|
||||||
|
implicitHeight: 36
|
||||||
|
text: "Put JSON Array"
|
||||||
|
onClicked: {
|
||||||
|
text_info.text = ""
|
||||||
|
FluNetwork.putJsonArray("https://httpbingo.org/put")
|
||||||
|
.add("name","孙悟空")
|
||||||
|
.add("age",500)
|
||||||
|
.add("address","花果山水帘洞")
|
||||||
|
.bind(root)
|
||||||
|
.go(callable)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluButton{
|
||||||
|
implicitWidth: parent.width
|
||||||
|
implicitHeight: 36
|
||||||
|
text: "Patch Body"
|
||||||
|
onClicked: {
|
||||||
|
text_info.text = ""
|
||||||
|
FluNetwork.patchBody("https://httpbingo.org/patch")
|
||||||
|
.setBody("花果山水帘洞美猴王齐天大圣孙悟空")
|
||||||
|
.bind(root)
|
||||||
|
.go(callable)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluButton{
|
||||||
|
implicitWidth: parent.width
|
||||||
|
implicitHeight: 36
|
||||||
|
text: "Patch Form"
|
||||||
|
onClicked: {
|
||||||
|
text_info.text = ""
|
||||||
|
FluNetwork.patchForm("https://httpbingo.org/patch")
|
||||||
|
.add("name","孙悟空")
|
||||||
|
.add("age",500)
|
||||||
|
.add("address","花果山水帘洞")
|
||||||
|
.bind(root)
|
||||||
|
.go(callable)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluButton{
|
||||||
|
implicitWidth: parent.width
|
||||||
|
implicitHeight: 36
|
||||||
|
text: "Patch JSON"
|
||||||
|
onClicked: {
|
||||||
|
text_info.text = ""
|
||||||
|
FluNetwork.patchJson("https://httpbingo.org/patch")
|
||||||
|
.add("name","孙悟空")
|
||||||
|
.add("age",500)
|
||||||
|
.add("address","花果山水帘洞")
|
||||||
|
.bind(root)
|
||||||
|
.go(callable)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluButton{
|
||||||
|
implicitWidth: parent.width
|
||||||
|
implicitHeight: 36
|
||||||
|
text: "Patch JSON Array"
|
||||||
|
onClicked: {
|
||||||
|
text_info.text = ""
|
||||||
|
FluNetwork.patchJsonArray("https://httpbingo.org/patch")
|
||||||
|
.add("name","孙悟空")
|
||||||
|
.add("age",500)
|
||||||
|
.add("address","花果山水帘洞")
|
||||||
|
.bind(root)
|
||||||
|
.go(callable)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluButton{
|
||||||
|
implicitWidth: parent.width
|
||||||
|
implicitHeight: 36
|
||||||
|
text: "Delete Body"
|
||||||
|
onClicked: {
|
||||||
|
text_info.text = ""
|
||||||
|
FluNetwork.deleteBody("https://httpbingo.org/delete")
|
||||||
|
.setBody("花果山水帘洞美猴王齐天大圣孙悟空")
|
||||||
|
.bind(root)
|
||||||
|
.go(callable)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluButton{
|
||||||
|
implicitWidth: parent.width
|
||||||
|
implicitHeight: 36
|
||||||
|
text: "Delete Form"
|
||||||
|
onClicked: {
|
||||||
|
text_info.text = ""
|
||||||
|
FluNetwork.deleteForm("https://httpbingo.org/delete")
|
||||||
|
.add("name","孙悟空")
|
||||||
|
.add("age",500)
|
||||||
|
.add("address","花果山水帘洞")
|
||||||
|
.bind(root)
|
||||||
|
.go(callable)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluButton{
|
||||||
|
implicitWidth: parent.width
|
||||||
|
implicitHeight: 36
|
||||||
|
text: "Delete JSON"
|
||||||
|
onClicked: {
|
||||||
|
text_info.text = ""
|
||||||
|
FluNetwork.deleteJson("https://httpbingo.org/delete")
|
||||||
|
.add("name","孙悟空")
|
||||||
|
.add("age",500)
|
||||||
|
.add("address","花果山水帘洞")
|
||||||
|
.bind(root)
|
||||||
|
.go(callable)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluButton{
|
||||||
|
implicitWidth: parent.width
|
||||||
|
implicitHeight: 36
|
||||||
|
text: "Delete JSON Array"
|
||||||
|
onClicked: {
|
||||||
|
text_info.text = ""
|
||||||
|
FluNetwork.deleteJsonArray("https://httpbingo.org/delete")
|
||||||
|
.add("name","孙悟空")
|
||||||
|
.add("age",500)
|
||||||
|
.add("address","花果山水帘洞")
|
||||||
|
.bind(root)
|
||||||
|
.go(callable)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluButton{
|
||||||
|
implicitWidth: parent.width
|
||||||
|
implicitHeight: 36
|
||||||
|
text: "Custom Header"
|
||||||
|
onClicked: {
|
||||||
|
text_info.text = ""
|
||||||
|
FluNetwork.postJson("https://httpbingo.org/post")
|
||||||
|
.addHeader("os","PC")
|
||||||
|
.addHeader("version","1.0.0")
|
||||||
|
.add("name","孙悟空")
|
||||||
|
.add("age",500)
|
||||||
|
.add("address","花果山水帘洞")
|
||||||
|
.bind(root)
|
||||||
|
.go(callable)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluButton{
|
||||||
|
implicitWidth: parent.width
|
||||||
|
implicitHeight: 36
|
||||||
|
text: "RequestFailedReadCache"
|
||||||
|
onClicked: {
|
||||||
|
text_info.text = ""
|
||||||
|
FluNetwork.postJson("https://httpbingo.org/post")
|
||||||
|
.setCacheMode(FluNetworkType.RequestFailedReadCache)
|
||||||
|
.add("name","孙悟空")
|
||||||
|
.add("age",500)
|
||||||
|
.add("address","花果山水帘洞")
|
||||||
|
.add("cacheMode","RequestFailedReadCache")
|
||||||
|
.bind(root)
|
||||||
|
.go(callable)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluButton{
|
||||||
|
implicitWidth: parent.width
|
||||||
|
implicitHeight: 36
|
||||||
|
text: "IfNoneCacheRequest"
|
||||||
|
onClicked: {
|
||||||
|
text_info.text = ""
|
||||||
|
FluNetwork.postJson("https://httpbingo.org/post")
|
||||||
|
.setCacheMode(FluNetworkType.IfNoneCacheRequest)
|
||||||
|
.add("name","孙悟空")
|
||||||
|
.add("age",500)
|
||||||
|
.add("address","花果山水帘洞")
|
||||||
|
.add("cacheMode","IfNoneCacheRequest")
|
||||||
|
.bind(root)
|
||||||
|
.go(callable)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluButton{
|
||||||
|
implicitWidth: parent.width
|
||||||
|
implicitHeight: 36
|
||||||
|
text: "FirstCacheThenRequest"
|
||||||
|
onClicked: {
|
||||||
|
text_info.text = ""
|
||||||
|
FluNetwork.postJson("https://httpbingo.org/post")
|
||||||
|
.setCacheMode(FluNetworkType.FirstCacheThenRequest)
|
||||||
|
.add("name","孙悟空")
|
||||||
|
.add("age",500)
|
||||||
|
.add("address","花果山水帘洞")
|
||||||
|
.add("cacheMode","FirstCacheThenRequest")
|
||||||
|
.bind(root)
|
||||||
|
.go(callable)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluButton{
|
||||||
|
implicitWidth: parent.width
|
||||||
|
implicitHeight: 36
|
||||||
|
text: "Timeout And Retry"
|
||||||
|
onClicked: {
|
||||||
|
text_info.text = ""
|
||||||
|
FluNetwork.postJson("https://httpbingo.org/post")
|
||||||
|
.setTimeout(5000)
|
||||||
|
.setRetry(3)
|
||||||
|
.add("name","孙悟空")
|
||||||
|
.add("age",500)
|
||||||
|
.add("address","花果山水帘洞")
|
||||||
|
.add("timeout","5000")
|
||||||
|
.add("retry","3")
|
||||||
|
.bind(root)
|
||||||
|
.go(callable)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluProgressButton{
|
||||||
|
id:btn_upload
|
||||||
|
implicitWidth: parent.width
|
||||||
|
implicitHeight: 36
|
||||||
|
text: "Upload File"
|
||||||
|
onClicked: {
|
||||||
|
file_dialog.open()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluProgressButton{
|
||||||
|
id:btn_download
|
||||||
|
implicitWidth: parent.width
|
||||||
|
implicitHeight: 36
|
||||||
|
text: "Download File"
|
||||||
|
onClicked: {
|
||||||
|
folder_dialog.showDialog(function(path){
|
||||||
|
FluNetwork.get("http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4")
|
||||||
|
.toDownload(path)
|
||||||
|
.bind(root)
|
||||||
|
.go(callable_download_file)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluProgressButton{
|
||||||
|
id:btn_download_breakpoint
|
||||||
|
implicitWidth: parent.width
|
||||||
|
implicitHeight: 36
|
||||||
|
text: "Breakpoint Download File"
|
||||||
|
onClicked: {
|
||||||
|
folder_dialog.showDialog(function(path){
|
||||||
|
FluNetwork.get("http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4")
|
||||||
|
.toDownload(path,true)
|
||||||
|
.bind(root)
|
||||||
|
.go(callable_breakpoint_download_file)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FluNetworkCallable{
|
||||||
|
id:callable_upload_file
|
||||||
|
onStart: {
|
||||||
|
btn_upload.disabled = true
|
||||||
|
}
|
||||||
|
onFinish: {
|
||||||
|
btn_upload.disabled = false
|
||||||
|
}
|
||||||
|
onError:
|
||||||
|
(status,errorString,result)=>{
|
||||||
|
btn_upload.progress = 0
|
||||||
|
text_info.text = result
|
||||||
|
console.debug(status+";"+errorString+";"+result)
|
||||||
|
}
|
||||||
|
onSuccess:
|
||||||
|
(result)=>{
|
||||||
|
text_info.text = result
|
||||||
|
}
|
||||||
|
onUploadProgress:
|
||||||
|
(sent,total)=>{
|
||||||
|
btn_upload.progress = sent/total
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FluNetworkCallable{
|
||||||
|
id:callable_download_file
|
||||||
|
onStart: {
|
||||||
|
btn_download.progress = 0
|
||||||
|
btn_download.disabled = true
|
||||||
|
}
|
||||||
|
onFinish: {
|
||||||
|
btn_download.disabled = false
|
||||||
|
}
|
||||||
|
onError:
|
||||||
|
(status,errorString,result)=>{
|
||||||
|
btn_download.progress = 0
|
||||||
|
showError(errorString)
|
||||||
|
console.debug(status+";"+errorString+";"+result)
|
||||||
|
}
|
||||||
|
onSuccess:
|
||||||
|
(result)=>{
|
||||||
|
showSuccess(result)
|
||||||
|
}
|
||||||
|
onDownloadProgress:
|
||||||
|
(recv,total)=>{
|
||||||
|
btn_download.progress = recv/total
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FluNetworkCallable{
|
||||||
|
id:callable_breakpoint_download_file
|
||||||
|
onStart: {
|
||||||
|
btn_download_breakpoint.progress = 0
|
||||||
|
btn_download_breakpoint.disabled = true
|
||||||
|
}
|
||||||
|
onFinish: {
|
||||||
|
btn_download_breakpoint.disabled = false
|
||||||
|
}
|
||||||
|
onError:
|
||||||
|
(status,errorString,result)=>{
|
||||||
|
btn_download_breakpoint.progress = 0
|
||||||
|
showError(errorString)
|
||||||
|
console.debug(status+";"+errorString+";"+result)
|
||||||
|
}
|
||||||
|
onSuccess:
|
||||||
|
(result)=>{
|
||||||
|
showSuccess(result)
|
||||||
|
}
|
||||||
|
onDownloadProgress:
|
||||||
|
(recv,total)=>{
|
||||||
|
btn_download_breakpoint.progress = recv/total
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FileDialog {
|
||||||
|
id: file_dialog
|
||||||
|
onAccepted: {
|
||||||
|
FluNetwork.postForm("https://httpbingo.org/post")
|
||||||
|
.setRetry(1)//只请求一次
|
||||||
|
.add("accessToken","12345678")
|
||||||
|
.addFile("file",FluTools.toLocalPath(file_dialog.currentFile))
|
||||||
|
.bind(root)
|
||||||
|
.go(callable_upload_file)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FileDialog {
|
||||||
|
property var onSelectListener
|
||||||
|
id: folder_dialog
|
||||||
|
folder: StandardPaths.standardLocations(StandardPaths.DownloadLocation)[0]
|
||||||
|
currentFile: StandardPaths.standardLocations(StandardPaths.DownloadLocation)[0]+"/big_buck_bunny.mp4"
|
||||||
|
fileMode: FileDialog.SaveFile
|
||||||
|
onAccepted: {
|
||||||
|
folder_dialog.onSelectListener(FluTools.toLocalPath(folder_dialog.currentFile))
|
||||||
|
}
|
||||||
|
function showDialog(listener){
|
||||||
|
folder_dialog.onSelectListener = listener
|
||||||
|
folder_dialog.open()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FluArea{
|
||||||
|
anchors{
|
||||||
|
top: layout_flick.top
|
||||||
|
bottom: layout_flick.bottom
|
||||||
|
left: layout_flick.right
|
||||||
|
right: parent.right
|
||||||
|
leftMargin: 8
|
||||||
|
}
|
||||||
|
Flickable{
|
||||||
|
clip: true
|
||||||
|
id:scrollview
|
||||||
|
boundsBehavior:Flickable.StopAtBounds
|
||||||
|
width: parent.width
|
||||||
|
height: parent.height
|
||||||
|
contentWidth: width
|
||||||
|
contentHeight: text_info.height
|
||||||
|
ScrollBar.vertical: FluScrollBar {}
|
||||||
|
FluText{
|
||||||
|
id:text_info
|
||||||
|
width: scrollview.width
|
||||||
|
wrapMode: Text.WrapAnywhere
|
||||||
|
padding: 14
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -3,7 +3,6 @@ import QtQuick.Controls
|
|||||||
import QtQuick.Layouts
|
import QtQuick.Layouts
|
||||||
import QtQuick.Window
|
import QtQuick.Window
|
||||||
import FluentUI
|
import FluentUI
|
||||||
import Qt5Compat.GraphicalEffects
|
|
||||||
import "qrc:///example/qml/component"
|
import "qrc:///example/qml/component"
|
||||||
|
|
||||||
FluScrollablePage{
|
FluScrollablePage{
|
||||||
@ -32,6 +31,7 @@ FluScrollablePage{
|
|||||||
FluTextBox{
|
FluTextBox{
|
||||||
id:text_box
|
id:text_box
|
||||||
text:"会磨刀的小猪"
|
text:"会磨刀的小猪"
|
||||||
|
Layout.preferredWidth: 240
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12,16 +12,15 @@ FluScrollablePage{
|
|||||||
FluArea{
|
FluArea{
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.topMargin: 20
|
Layout.topMargin: 20
|
||||||
height: 460
|
height: 80
|
||||||
paddings: 10
|
paddings: 10
|
||||||
|
|
||||||
Column{
|
Column{
|
||||||
spacing: 15
|
spacing: 15
|
||||||
anchors{
|
anchors{
|
||||||
verticalCenter: parent.verticalCenter
|
|
||||||
left: parent.left
|
left: parent.left
|
||||||
|
verticalCenter: parent.verticalCenter
|
||||||
}
|
}
|
||||||
|
|
||||||
RowLayout{
|
RowLayout{
|
||||||
Layout.topMargin: 20
|
Layout.topMargin: 20
|
||||||
FluRectangle{
|
FluRectangle{
|
||||||
@ -61,70 +60,6 @@ FluScrollablePage{
|
|||||||
radius:[0,0,0,15]
|
radius:[0,0,0,15]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
FluText{
|
|
||||||
text:"配合图片使用"
|
|
||||||
font: FluTextStyle.Subtitle
|
|
||||||
Layout.topMargin: 20
|
|
||||||
}
|
|
||||||
RowLayout{
|
|
||||||
spacing: 14
|
|
||||||
FluRectangle{
|
|
||||||
width: 50
|
|
||||||
height: 50
|
|
||||||
radius:[25,0,25,25]
|
|
||||||
Image {
|
|
||||||
asynchronous: true
|
|
||||||
anchors.fill: parent
|
|
||||||
source: "qrc:/example/res/svg/avatar_1.svg"
|
|
||||||
sourceSize: Qt.size(width,height)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
FluRectangle{
|
|
||||||
width: 50
|
|
||||||
height: 50
|
|
||||||
radius:[10,10,10,10]
|
|
||||||
Image {
|
|
||||||
asynchronous: true
|
|
||||||
anchors.fill: parent
|
|
||||||
sourceSize: Qt.size(width,height)
|
|
||||||
source: "qrc:/example/res/svg/avatar_2.svg"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
FluRectangle{
|
|
||||||
width: 50
|
|
||||||
height: 50
|
|
||||||
radius:[25,25,25,25]
|
|
||||||
Image {
|
|
||||||
asynchronous: true
|
|
||||||
anchors.fill: parent
|
|
||||||
sourceSize: Qt.size(width,height)
|
|
||||||
source: "qrc:/example/res/svg/avatar_3.svg"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
FluRectangle{
|
|
||||||
width: 50
|
|
||||||
height: 50
|
|
||||||
radius:[0,25,25,25]
|
|
||||||
Image {
|
|
||||||
asynchronous: true
|
|
||||||
anchors.fill: parent
|
|
||||||
sourceSize: Qt.size(width,height)
|
|
||||||
source: "qrc:/example/res/svg/avatar_4.svg"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
FluRectangle{
|
|
||||||
width: 1920/5
|
|
||||||
height: 1200/5
|
|
||||||
radius:[15,15,15,15]
|
|
||||||
Image {
|
|
||||||
asynchronous: true
|
|
||||||
source: "qrc:/example/res/image/banner_1.jpg"
|
|
||||||
anchors.fill: parent
|
|
||||||
sourceSize: Qt.size(2*width,2*height)
|
|
||||||
}
|
|
||||||
Layout.topMargin: 20
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
CodeExpander{
|
CodeExpander{
|
||||||
@ -134,14 +69,6 @@ FluScrollablePage{
|
|||||||
radius: [25,25,25,25]
|
radius: [25,25,25,25]
|
||||||
width: 50
|
width: 50
|
||||||
height: 50
|
height: 50
|
||||||
Image{
|
|
||||||
asynchronous: true
|
|
||||||
anchors.fill: parent
|
|
||||||
source: "qrc:/example/res/svg/avatar_4.svg"
|
|
||||||
sourceSize: Qt.size(width,height)
|
|
||||||
}
|
|
||||||
}'
|
}'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@ import QtQuick.Layouts
|
|||||||
import QtQuick.Window
|
import QtQuick.Window
|
||||||
import QtQuick.Controls
|
import QtQuick.Controls
|
||||||
import FluentUI
|
import FluentUI
|
||||||
|
import Qt.labs.platform
|
||||||
import "qrc:///example/qml/component"
|
import "qrc:///example/qml/component"
|
||||||
|
|
||||||
FluScrollablePage{
|
FluScrollablePage{
|
||||||
@ -30,10 +31,11 @@ FluScrollablePage{
|
|||||||
Layout.topMargin: 10
|
Layout.topMargin: 10
|
||||||
Layout.leftMargin: 4
|
Layout.leftMargin: 4
|
||||||
Layout.bottomMargin: 4
|
Layout.bottomMargin: 4
|
||||||
|
radius: 4
|
||||||
color: FluTheme.dark ? FluColors.Black : FluColors.White
|
color: FluTheme.dark ? FluColors.Black : FluColors.White
|
||||||
FluShadow{
|
FluShadow{
|
||||||
radius: 0
|
radius: 4
|
||||||
color: FluTheme.primaryColor.dark
|
color: FluTheme.primaryColor
|
||||||
}
|
}
|
||||||
Image{
|
Image{
|
||||||
id:image
|
id:image
|
||||||
@ -46,7 +48,7 @@ FluScrollablePage{
|
|||||||
FluScreenshot{
|
FluScreenshot{
|
||||||
id:screenshot
|
id:screenshot
|
||||||
captrueMode: FluScreenshotType.File
|
captrueMode: FluScreenshotType.File
|
||||||
saveFolder: FluTools.getApplicationDirPath()+"/screenshot"
|
saveFolder: StandardPaths.writableLocation(StandardPaths.AppLocalDataLocation)+"/screenshot"
|
||||||
onCaptrueCompleted:
|
onCaptrueCompleted:
|
||||||
(captrue)=>{
|
(captrue)=>{
|
||||||
image.source = captrue
|
image.source = captrue
|
||||||
|
@ -5,11 +5,136 @@ import QtQuick.Controls
|
|||||||
import FluentUI
|
import FluentUI
|
||||||
import "qrc:///example/qml/global"
|
import "qrc:///example/qml/global"
|
||||||
import "qrc:///example/qml/component"
|
import "qrc:///example/qml/component"
|
||||||
|
import "qrc:///example/qml/viewmodel"
|
||||||
|
|
||||||
FluScrollablePage{
|
FluScrollablePage{
|
||||||
|
|
||||||
title:"Settings"
|
title:"Settings"
|
||||||
|
|
||||||
|
SettingsViewModel{
|
||||||
|
id:viewmodel_settings
|
||||||
|
}
|
||||||
|
|
||||||
|
FluEvent{
|
||||||
|
id:event_checkupdate_finish
|
||||||
|
name: "checkUpdateFinish"
|
||||||
|
onTriggered: {
|
||||||
|
btn_checkupdate.loading = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Component.onCompleted: {
|
||||||
|
FluEventBus.registerEvent(event_checkupdate_finish)
|
||||||
|
}
|
||||||
|
|
||||||
|
Component.onDestruction: {
|
||||||
|
FluEventBus.unRegisterEvent(event_checkupdate_finish)
|
||||||
|
}
|
||||||
|
|
||||||
|
FluArea{
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.topMargin: 20
|
||||||
|
height: 60
|
||||||
|
paddings: 10
|
||||||
|
Row{
|
||||||
|
spacing: 20
|
||||||
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
FluText{
|
||||||
|
text:"当前版本 v%1".arg(AppInfo.version)
|
||||||
|
font: FluTextStyle.Body
|
||||||
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
}
|
||||||
|
FluLoadingButton{
|
||||||
|
id:btn_checkupdate
|
||||||
|
text:"检查更新"
|
||||||
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
onClicked: {
|
||||||
|
loading = true
|
||||||
|
FluEventBus.post("checkUpdate")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FluArea{
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.topMargin: 20
|
||||||
|
height: 50
|
||||||
|
paddings: 10
|
||||||
|
FluCheckBox{
|
||||||
|
text:"V-Sync"
|
||||||
|
checked: FluApp.vsync
|
||||||
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
onClicked: {
|
||||||
|
FluApp.vsync = !FluApp.vsync
|
||||||
|
dialog_restart.open()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FluArea{
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.topMargin: 20
|
||||||
|
height: 50
|
||||||
|
paddings: 10
|
||||||
|
FluCheckBox{
|
||||||
|
text:"Use System AppBar"
|
||||||
|
checked: FluApp.useSystemAppBar
|
||||||
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
onClicked: {
|
||||||
|
FluApp.useSystemAppBar = !FluApp.useSystemAppBar
|
||||||
|
dialog_restart.open()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FluArea{
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.topMargin: 20
|
||||||
|
height: 50
|
||||||
|
paddings: 10
|
||||||
|
FluCheckBox{
|
||||||
|
text:"fitsAppBarWindows"
|
||||||
|
checked: window.fitsAppBarWindows
|
||||||
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
onClicked: {
|
||||||
|
window.fitsAppBarWindows = !window.fitsAppBarWindows
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FluArea{
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.topMargin: 20
|
||||||
|
height: 50
|
||||||
|
paddings: 10
|
||||||
|
FluCheckBox{
|
||||||
|
text:"Software Render"
|
||||||
|
checked: SettingsHelper.getRender() === "software"
|
||||||
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
onClicked: {
|
||||||
|
if(SettingsHelper.getRender() === "software"){
|
||||||
|
SettingsHelper.saveRender("")
|
||||||
|
}else{
|
||||||
|
SettingsHelper.saveRender("software")
|
||||||
|
}
|
||||||
|
dialog_restart.open()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FluContentDialog{
|
||||||
|
id:dialog_restart
|
||||||
|
title:"友情提示"
|
||||||
|
message:"此操作需要重启才能生效,是否重新启动?"
|
||||||
|
buttonFlags: FluContentDialogType.NegativeButton | FluContentDialogType.PositiveButton
|
||||||
|
negativeText: "取消"
|
||||||
|
positiveText:"确定"
|
||||||
|
onPositiveClicked:{
|
||||||
|
FluApp.exit(931)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
FluArea{
|
FluArea{
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.topMargin: 20
|
Layout.topMargin: 20
|
||||||
@ -23,7 +148,7 @@ FluScrollablePage{
|
|||||||
left: parent.left
|
left: parent.left
|
||||||
}
|
}
|
||||||
FluText{
|
FluText{
|
||||||
text:lang.dark_mode
|
text:Lang.dark_mode
|
||||||
font: FluTextStyle.BodyStrong
|
font: FluTextStyle.BodyStrong
|
||||||
Layout.bottomMargin: 4
|
Layout.bottomMargin: 4
|
||||||
}
|
}
|
||||||
@ -53,17 +178,17 @@ FluScrollablePage{
|
|||||||
left: parent.left
|
left: parent.left
|
||||||
}
|
}
|
||||||
FluText{
|
FluText{
|
||||||
text:lang.navigation_view_display_mode
|
text:Lang.navigation_view_display_mode
|
||||||
font: FluTextStyle.BodyStrong
|
font: FluTextStyle.BodyStrong
|
||||||
Layout.bottomMargin: 4
|
Layout.bottomMargin: 4
|
||||||
}
|
}
|
||||||
Repeater{
|
Repeater{
|
||||||
model: [{title:"Open",mode:FluNavigationViewType.Open},{title:"Compact",mode:FluNavigationViewType.Compact},{title:"Minimal",mode:FluNavigationViewType.Minimal},{title:"Auto",mode:FluNavigationViewType.Auto}]
|
model: [{title:"Open",mode:FluNavigationViewType.Open},{title:"Compact",mode:FluNavigationViewType.Compact},{title:"Minimal",mode:FluNavigationViewType.Minimal},{title:"Auto",mode:FluNavigationViewType.Auto}]
|
||||||
delegate: FluRadioButton{
|
delegate: FluRadioButton{
|
||||||
checked : MainEvent.displayMode===modelData.mode
|
checked : viewmodel_settings.displayMode===modelData.mode
|
||||||
text:modelData.title
|
text:modelData.title
|
||||||
clickListener:function(){
|
clickListener:function(){
|
||||||
MainEvent.displayMode = modelData.mode
|
viewmodel_settings.displayMode = modelData.mode
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -84,7 +209,7 @@ FluScrollablePage{
|
|||||||
}
|
}
|
||||||
|
|
||||||
FluText{
|
FluText{
|
||||||
text:lang.locale
|
text:Lang.locale
|
||||||
font: FluTextStyle.BodyStrong
|
font: FluTextStyle.BodyStrong
|
||||||
Layout.bottomMargin: 4
|
Layout.bottomMargin: 4
|
||||||
}
|
}
|
||||||
@ -92,17 +217,16 @@ FluScrollablePage{
|
|||||||
Flow{
|
Flow{
|
||||||
spacing: 5
|
spacing: 5
|
||||||
Repeater{
|
Repeater{
|
||||||
model: ["Zh","En"]
|
model: Lang.__localeList
|
||||||
delegate: FluRadioButton{
|
delegate: FluRadioButton{
|
||||||
checked: appInfo.lang.objectName === modelData
|
checked: Lang.__locale === modelData
|
||||||
text:modelData
|
text:modelData
|
||||||
clickListener:function(){
|
clickListener:function(){
|
||||||
appInfo.changeLang(modelData)
|
Lang.__locale = modelData
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
30
example/qml-Qt6/page/T_ShortcutPicker.qml
Normal file
30
example/qml-Qt6/page/T_ShortcutPicker.qml
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
import QtQuick
|
||||||
|
import QtQuick.Controls
|
||||||
|
import QtQuick.Layouts
|
||||||
|
import QtQuick.Window
|
||||||
|
import FluentUI
|
||||||
|
import "qrc:///example/qml/component"
|
||||||
|
|
||||||
|
FluScrollablePage{
|
||||||
|
|
||||||
|
title:"ShortcutPicker"
|
||||||
|
|
||||||
|
FluArea{
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.topMargin: 20
|
||||||
|
height: 100
|
||||||
|
paddings: 10
|
||||||
|
FluShortcutPicker{
|
||||||
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
}
|
||||||
|
}
|
||||||
|
CodeExpander{
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.topMargin: -1
|
||||||
|
code:'FluShortcutPicker{
|
||||||
|
|
||||||
|
}'
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -66,7 +66,7 @@ FluScrollablePage{
|
|||||||
}
|
}
|
||||||
Rectangle {
|
Rectangle {
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
color:FluTheme.primaryColor.dark
|
color:FluTheme.primaryColor
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -78,7 +78,7 @@ FluScrollablePage{
|
|||||||
statusMode: FluStatusViewType.Loading
|
statusMode: FluStatusViewType.Loading
|
||||||
Rectangle{
|
Rectangle{
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
color:FluTheme.primaryColor.dark
|
color:FluTheme.primaryColor
|
||||||
}
|
}
|
||||||
}'
|
}'
|
||||||
}
|
}
|
||||||
|
@ -7,12 +7,45 @@ import "qrc:///example/qml/component"
|
|||||||
|
|
||||||
FluContentPage{
|
FluContentPage{
|
||||||
|
|
||||||
|
id:root
|
||||||
title:"TableView"
|
title:"TableView"
|
||||||
|
signal checkBoxChanged
|
||||||
|
|
||||||
|
property var dataSource : []
|
||||||
|
property int sortType: 0
|
||||||
|
|
||||||
Component.onCompleted: {
|
Component.onCompleted: {
|
||||||
loadData(1,1000)
|
loadData(1,1000)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onSortTypeChanged: {
|
||||||
|
table_view.closeEditor()
|
||||||
|
if(sortType === 0){
|
||||||
|
table_view.sort()
|
||||||
|
}else if(sortType === 1){
|
||||||
|
table_view.sort((a, b) => a.age - b.age);
|
||||||
|
}else if(sortType === 2){
|
||||||
|
table_view.sort((a, b) => b.age - a.age);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Component{
|
||||||
|
id:com_checbox
|
||||||
|
Item{
|
||||||
|
FluCheckBox{
|
||||||
|
anchors.centerIn: parent
|
||||||
|
checked: true === options.checked
|
||||||
|
enableAnimation: false
|
||||||
|
clickListener: function(){
|
||||||
|
var obj = tableModel.getRow(row)
|
||||||
|
obj.checkbox = table_view.customItem(com_checbox,{checked:!options.checked})
|
||||||
|
tableModel.setRow(row,obj)
|
||||||
|
checkBoxChanged()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Component{
|
Component{
|
||||||
id:com_action
|
id:com_action
|
||||||
Item{
|
Item{
|
||||||
@ -23,11 +56,15 @@ FluContentPage{
|
|||||||
onClicked: {
|
onClicked: {
|
||||||
table_view.closeEditor()
|
table_view.closeEditor()
|
||||||
tableModel.removeRow(row)
|
tableModel.removeRow(row)
|
||||||
|
checkBoxChanged()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
FluFilledButton{
|
FluFilledButton{
|
||||||
text:"编辑"
|
text:"编辑"
|
||||||
onClicked: {
|
onClicked: {
|
||||||
|
var obj = tableModel.getRow(row)
|
||||||
|
obj.name = "12345"
|
||||||
|
tableModel.setRow(row,obj)
|
||||||
showSuccess(JSON.stringify(tableModel.getRow(row)))
|
showSuccess(JSON.stringify(tableModel.getRow(row)))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -35,39 +72,44 @@ FluContentPage{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function loadData(page,count){
|
|
||||||
var numbers = [100, 300, 500, 1000];
|
Component{
|
||||||
function getRandomAge() {
|
id:com_column_checbox
|
||||||
var randomIndex = Math.floor(Math.random() * numbers.length);
|
Item{
|
||||||
return numbers[randomIndex];
|
RowLayout{
|
||||||
|
anchors.centerIn: parent
|
||||||
|
FluText{
|
||||||
|
text:"全选"
|
||||||
|
Layout.alignment: Qt.AlignVCenter
|
||||||
|
}
|
||||||
|
FluCheckBox{
|
||||||
|
checked: true === options.checked
|
||||||
|
enableAnimation: false
|
||||||
|
Layout.alignment: Qt.AlignVCenter
|
||||||
|
clickListener: function(){
|
||||||
|
var checked = !options.checked
|
||||||
|
itemModel.display = table_view.customItem(com_column_checbox,{"checked":checked})
|
||||||
|
for(var i =0;i< tableModel.rowCount ;i++){
|
||||||
|
var rowData = tableModel.getRow(i)
|
||||||
|
rowData.checkbox = table_view.customItem(com_checbox,{"checked":checked})
|
||||||
|
tableModel.setRow(i,rowData)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Connections{
|
||||||
|
target: root
|
||||||
|
function onCheckBoxChanged(){
|
||||||
|
for(var i =0;i< tableModel.rowCount ;i++){
|
||||||
|
if(false === tableModel.getRow(i).checkbox.options.checked){
|
||||||
|
itemModel.display = table_view.customItem(com_column_checbox,{"checked":false})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
itemModel.display = table_view.customItem(com_column_checbox,{"checked":true})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
var names = ["孙悟空", "猪八戒", "沙和尚", "唐僧","白骨夫人","金角大王","熊山君","黄风怪","银角大王"];
|
|
||||||
function getRandomName(){
|
|
||||||
var randomIndex = Math.floor(Math.random() * names.length);
|
|
||||||
return names[randomIndex];
|
|
||||||
}
|
|
||||||
var nicknames = ["复海大圣","混天大圣","移山大圣","通风大圣","驱神大圣","齐天大圣","平天大圣"]
|
|
||||||
function getRandomNickname(){
|
|
||||||
var randomIndex = Math.floor(Math.random() * nicknames.length);
|
|
||||||
return nicknames[randomIndex];
|
|
||||||
}
|
|
||||||
var addresses = ["傲来国界花果山水帘洞","傲来国界坎源山脏水洞","大唐国界黑风山黑风洞","大唐国界黄风岭黄风洞","大唐国界骷髅山白骨洞","宝象国界碗子山波月洞","宝象国界平顶山莲花洞","宝象国界压龙山压龙洞","乌鸡国界号山枯松涧火云洞","乌鸡国界衡阳峪黑水河河神府"]
|
|
||||||
function getRandomAddresses(){
|
|
||||||
var randomIndex = Math.floor(Math.random() * addresses.length);
|
|
||||||
return addresses[randomIndex];
|
|
||||||
}
|
|
||||||
const dataSource = []
|
|
||||||
for(var i=0;i<count;i++){
|
|
||||||
dataSource.push({
|
|
||||||
name: getRandomName(),
|
|
||||||
age:getRandomAge(),
|
|
||||||
address: getRandomAddresses(),
|
|
||||||
nickname: getRandomNickname(),
|
|
||||||
longstring:"你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好",
|
|
||||||
action:com_action
|
|
||||||
})
|
|
||||||
}
|
|
||||||
table_view.dataSource = dataSource
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Component{
|
Component{
|
||||||
@ -94,6 +136,88 @@ FluContentPage{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Component{
|
||||||
|
id:com_avatar
|
||||||
|
Item{
|
||||||
|
FluClip{
|
||||||
|
anchors.centerIn: parent
|
||||||
|
width: 40
|
||||||
|
height: 40
|
||||||
|
radius: [20,20,20,20]
|
||||||
|
Image{
|
||||||
|
anchors.fill: parent
|
||||||
|
source: {
|
||||||
|
if(options && options.avatar){
|
||||||
|
return options.avatar
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
sourceSize: Qt.size(80,80)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Component{
|
||||||
|
id:com_column_sort_age
|
||||||
|
Item{
|
||||||
|
FluText{
|
||||||
|
text:"年龄"
|
||||||
|
anchors.centerIn: parent
|
||||||
|
}
|
||||||
|
ColumnLayout{
|
||||||
|
spacing: 0
|
||||||
|
anchors{
|
||||||
|
right: parent.right
|
||||||
|
verticalCenter: parent.verticalCenter
|
||||||
|
rightMargin: 4
|
||||||
|
}
|
||||||
|
FluIconButton{
|
||||||
|
Layout.preferredWidth: 20
|
||||||
|
Layout.preferredHeight: 15
|
||||||
|
iconSize: 12
|
||||||
|
verticalPadding:0
|
||||||
|
horizontalPadding:0
|
||||||
|
iconSource: FluentIcons.ChevronUp
|
||||||
|
iconColor: {
|
||||||
|
if(1 === root.sortType){
|
||||||
|
return FluTheme.primaryColor
|
||||||
|
}
|
||||||
|
return FluTheme.dark ? Qt.rgba(1,1,1,1) : Qt.rgba(0,0,0,1)
|
||||||
|
}
|
||||||
|
onClicked: {
|
||||||
|
if(root.sortType === 1){
|
||||||
|
root.sortType = 0
|
||||||
|
return
|
||||||
|
}
|
||||||
|
root.sortType = 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluIconButton{
|
||||||
|
Layout.preferredWidth: 20
|
||||||
|
Layout.preferredHeight: 15
|
||||||
|
iconSize: 12
|
||||||
|
verticalPadding:0
|
||||||
|
horizontalPadding:0
|
||||||
|
iconSource: FluentIcons.ChevronDown
|
||||||
|
iconColor: {
|
||||||
|
if(2 === root.sortType){
|
||||||
|
return FluTheme.primaryColor
|
||||||
|
}
|
||||||
|
return FluTheme.dark ? Qt.rgba(1,1,1,1) : Qt.rgba(0,0,0,1)
|
||||||
|
}
|
||||||
|
onClicked: {
|
||||||
|
if(root.sortType === 2){
|
||||||
|
root.sortType = 0
|
||||||
|
return
|
||||||
|
}
|
||||||
|
root.sortType = 2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
FluTableView{
|
FluTableView{
|
||||||
id:table_view
|
id:table_view
|
||||||
anchors{
|
anchors{
|
||||||
@ -104,13 +228,27 @@ FluContentPage{
|
|||||||
}
|
}
|
||||||
anchors.topMargin: 20
|
anchors.topMargin: 20
|
||||||
columnSource:[
|
columnSource:[
|
||||||
|
{
|
||||||
|
title: table_view.customItem(com_column_checbox,{checked:true}),
|
||||||
|
dataIndex: 'checkbox',
|
||||||
|
width:80,
|
||||||
|
minimumWidth:80,
|
||||||
|
maximumWidth:80,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '头像',
|
||||||
|
dataIndex: 'avatar',
|
||||||
|
width:100,
|
||||||
|
minimumWidth:100,
|
||||||
|
maximumWidth:100
|
||||||
|
},
|
||||||
{
|
{
|
||||||
title: '姓名',
|
title: '姓名',
|
||||||
dataIndex: 'name',
|
dataIndex: 'name',
|
||||||
readOnly:true,
|
readOnly:true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: '年龄',
|
title: table_view.customItem(com_column_sort_age,{sort:0}),
|
||||||
dataIndex: 'age',
|
dataIndex: 'age',
|
||||||
editDelegate:com_combobox,
|
editDelegate:com_combobox,
|
||||||
width:100,
|
width:100,
|
||||||
@ -166,6 +304,50 @@ FluContentPage{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function loadData(page,count){
|
||||||
|
var numbers = [100, 300, 500, 1000];
|
||||||
|
function getRandomAge() {
|
||||||
|
var randomIndex = Math.floor(Math.random() * numbers.length);
|
||||||
|
return numbers[randomIndex];
|
||||||
|
}
|
||||||
|
var names = ["孙悟空", "猪八戒", "沙和尚", "唐僧","白骨夫人","金角大王","熊山君","黄风怪","银角大王"];
|
||||||
|
function getRandomName(){
|
||||||
|
var randomIndex = Math.floor(Math.random() * names.length);
|
||||||
|
return names[randomIndex];
|
||||||
|
}
|
||||||
|
var nicknames = ["复海大圣","混天大圣","移山大圣","通风大圣","驱神大圣","齐天大圣","平天大圣"]
|
||||||
|
function getRandomNickname(){
|
||||||
|
var randomIndex = Math.floor(Math.random() * nicknames.length);
|
||||||
|
return nicknames[randomIndex];
|
||||||
|
}
|
||||||
|
var addresses = ["傲来国界花果山水帘洞","傲来国界坎源山脏水洞","大唐国界黑风山黑风洞","大唐国界黄风岭黄风洞","大唐国界骷髅山白骨洞","宝象国界碗子山波月洞","宝象国界平顶山莲花洞","宝象国界压龙山压龙洞","乌鸡国界号山枯松涧火云洞","乌鸡国界衡阳峪黑水河河神府"]
|
||||||
|
function getRandomAddresses(){
|
||||||
|
var randomIndex = Math.floor(Math.random() * addresses.length);
|
||||||
|
return addresses[randomIndex];
|
||||||
|
}
|
||||||
|
|
||||||
|
var avatars = ["qrc:/example/res/svg/avatar_1.svg", "qrc:/example/res/svg/avatar_2.svg", "qrc:/example/res/svg/avatar_3.svg", "qrc:/example/res/svg/avatar_4.svg","qrc:/example/res/svg/avatar_5.svg","qrc:/example/res/svg/avatar_6.svg","qrc:/example/res/svg/avatar_7.svg","qrc:/example/res/svg/avatar_8.svg","qrc:/example/res/svg/avatar_9.svg","qrc:/example/res/svg/avatar_10.svg","qrc:/example/res/svg/avatar_11.svg","qrc:/example/res/svg/avatar_12.svg"];
|
||||||
|
function getAvatar(){
|
||||||
|
var randomIndex = Math.floor(Math.random() * avatars.length);
|
||||||
|
return avatars[randomIndex];
|
||||||
|
}
|
||||||
|
|
||||||
|
const dataSource = []
|
||||||
|
for(var i=0;i<count;i++){
|
||||||
|
dataSource.push({
|
||||||
|
checkbox: table_view.customItem(com_checbox,{checked:true}),
|
||||||
|
avatar:table_view.customItem(com_avatar,{avatar:getAvatar()}),
|
||||||
|
name: getRandomName(),
|
||||||
|
age:getRandomAge(),
|
||||||
|
address: getRandomAddresses(),
|
||||||
|
nickname: getRandomNickname(),
|
||||||
|
longstring:"你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好",
|
||||||
|
action: table_view.customItem(com_action),
|
||||||
|
minimumHeight:50
|
||||||
|
})
|
||||||
|
}
|
||||||
|
root.dataSource = dataSource
|
||||||
|
table_view.dataSource = root.dataSource
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -4,12 +4,19 @@ import QtQuick.Layouts
|
|||||||
import QtQuick.Window
|
import QtQuick.Window
|
||||||
import FluentUI
|
import FluentUI
|
||||||
import "qrc:///example/qml/component"
|
import "qrc:///example/qml/component"
|
||||||
|
import "qrc:///example/qml/viewmodel"
|
||||||
|
|
||||||
FluScrollablePage{
|
FluScrollablePage{
|
||||||
|
|
||||||
launchMode: FluPageType.SingleInstance
|
|
||||||
|
|
||||||
title:"TextBox"
|
title:"TextBox"
|
||||||
|
|
||||||
|
TextBoxViewModel{
|
||||||
|
id:viewModel
|
||||||
|
}
|
||||||
|
|
||||||
|
Component.onDestruction: {
|
||||||
|
console.debug("T_TextBox页面销毁了")
|
||||||
|
}
|
||||||
|
|
||||||
FluArea{
|
FluArea{
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
height: 68
|
height: 68
|
||||||
@ -20,6 +27,10 @@ FluScrollablePage{
|
|||||||
placeholderText: "单行输入框"
|
placeholderText: "单行输入框"
|
||||||
disabled:text_box_switch.checked
|
disabled:text_box_switch.checked
|
||||||
cleanEnabled: true
|
cleanEnabled: true
|
||||||
|
text:viewModel.text1
|
||||||
|
onTextChanged: {
|
||||||
|
viewModel.text1 = text
|
||||||
|
}
|
||||||
anchors{
|
anchors{
|
||||||
verticalCenter: parent.verticalCenter
|
verticalCenter: parent.verticalCenter
|
||||||
left: parent.left
|
left: parent.left
|
||||||
@ -84,6 +95,10 @@ FluScrollablePage{
|
|||||||
FluMultilineTextBox{
|
FluMultilineTextBox{
|
||||||
id:multiine_textbox
|
id:multiine_textbox
|
||||||
placeholderText: "多行输入框"
|
placeholderText: "多行输入框"
|
||||||
|
text:viewModel.text2
|
||||||
|
onTextChanged: {
|
||||||
|
viewModel.text2 = text
|
||||||
|
}
|
||||||
disabled:text_box_multi_switch.checked
|
disabled:text_box_multi_switch.checked
|
||||||
anchors{
|
anchors{
|
||||||
verticalCenter: parent.verticalCenter
|
verticalCenter: parent.verticalCenter
|
||||||
|
@ -32,7 +32,7 @@ FluScrollablePage{
|
|||||||
anchors.centerIn: parent
|
anchors.centerIn: parent
|
||||||
iconSource: FluentIcons.AcceptMedium
|
iconSource: FluentIcons.AcceptMedium
|
||||||
iconSize: 15
|
iconSize: 15
|
||||||
visible: modelData === FluTheme.primaryColor
|
visible: modelData === FluTheme.themeColor
|
||||||
color: FluTheme.dark ? Qt.rgba(0,0,0,1) : Qt.rgba(1,1,1,1)
|
color: FluTheme.dark ? Qt.rgba(0,0,0,1) : Qt.rgba(1,1,1,1)
|
||||||
}
|
}
|
||||||
MouseArea{
|
MouseArea{
|
||||||
@ -40,7 +40,7 @@ FluScrollablePage{
|
|||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
hoverEnabled: true
|
hoverEnabled: true
|
||||||
onClicked: {
|
onClicked: {
|
||||||
FluTheme.primaryColor = modelData
|
FluTheme.themeColor = modelData
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -88,7 +88,7 @@ FluScrollablePage{
|
|||||||
CodeExpander{
|
CodeExpander{
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.topMargin: -1
|
Layout.topMargin: -1
|
||||||
code:'FluTheme.primaryColor = FluColors.Orange
|
code:'FluTheme.themeColor = FluColors.Orange
|
||||||
|
|
||||||
FluTheme.dark = true
|
FluTheme.dark = true
|
||||||
|
|
||||||
|
@ -84,7 +84,7 @@ FluScrollablePage{
|
|||||||
text:"找到一份Android外包开发岗位,开发了一个Android应用,满满成就感!前端、服务端、Flutter也都懂一丢丢,什么都会什么都不精通,钱途无望"
|
text:"找到一份Android外包开发岗位,开发了一个Android应用,满满成就感!前端、服务端、Flutter也都懂一丢丢,什么都会什么都不精通,钱途无望"
|
||||||
}
|
}
|
||||||
ListElement{
|
ListElement{
|
||||||
lable:"2020-06-01"
|
lable:"2021-06-01"
|
||||||
text:"由于某个项目紧急,临时加入Qt项目组(就因为大学学了点C++),本来是想进去打个酱油,到后面竟然成开发主力,坑啊"
|
text:"由于某个项目紧急,临时加入Qt项目组(就因为大学学了点C++),本来是想进去打个酱油,到后面竟然成开发主力,坑啊"
|
||||||
}
|
}
|
||||||
ListElement{
|
ListElement{
|
||||||
@ -110,6 +110,7 @@ FluScrollablePage{
|
|||||||
FluTextBox{
|
FluTextBox{
|
||||||
id:text_box
|
id:text_box
|
||||||
text:"Technical testing 2015-09-01"
|
text:"Technical testing 2015-09-01"
|
||||||
|
Layout.preferredWidth: 240
|
||||||
}
|
}
|
||||||
FluFilledButton{
|
FluFilledButton{
|
||||||
text:"Append"
|
text:"Append"
|
||||||
|
@ -5,152 +5,127 @@ import QtQuick.Controls
|
|||||||
import FluentUI
|
import FluentUI
|
||||||
import "qrc:///example/qml/component"
|
import "qrc:///example/qml/component"
|
||||||
|
|
||||||
FluScrollablePage {
|
FluContentPage {
|
||||||
|
|
||||||
title:"TreeView"
|
title:"TreeView"
|
||||||
|
|
||||||
function randomName() {
|
function treeData(){
|
||||||
var names = ["张三", "李四", "王五", "赵六", "钱七", "孙八", "周九", "吴十"]
|
const dig = (path = '0', level = 4) => {
|
||||||
return names[Math.floor(Math.random() * names.length)]
|
const list = [];
|
||||||
|
for (let i = 0; i < 6; i += 1) {
|
||||||
|
const key = `${path}-${i}`;
|
||||||
|
const treeNode = {
|
||||||
|
title: key,
|
||||||
|
key,
|
||||||
|
};
|
||||||
|
if (level > 0) {
|
||||||
|
treeNode.children = dig(key, level - 1);
|
||||||
|
}
|
||||||
|
list.push(treeNode);
|
||||||
|
}
|
||||||
|
return list;
|
||||||
|
};
|
||||||
|
return dig();
|
||||||
}
|
}
|
||||||
|
|
||||||
function randomCompany() {
|
Column{
|
||||||
var companies = ["阿里巴巴", "腾讯", "百度", "京东", "华为", "小米", "字节跳动", "美团", "滴滴"]
|
id:layout_column
|
||||||
return companies[Math.floor(Math.random() * companies.length)]
|
spacing: 12
|
||||||
}
|
width: 300
|
||||||
|
anchors{
|
||||||
function randomDepartment() {
|
topMargin: 20
|
||||||
var departments = ["技术部", "销售部", "市场部", "人事部", "财务部", "客服部", "产品部", "设计部", "运营部"]
|
top:parent.top
|
||||||
return departments[Math.floor(Math.random() * departments.length)]
|
left: parent.left
|
||||||
}
|
leftMargin: 10
|
||||||
|
bottom:parent.bottom
|
||||||
function createEmployee() {
|
bottomMargin: 20
|
||||||
var name = randomName()
|
|
||||||
return tree_view.createItem(name, false)
|
|
||||||
}
|
|
||||||
|
|
||||||
function createSubtree(numEmployees) {
|
|
||||||
var employees = []
|
|
||||||
for (var i = 0; i < numEmployees; i++) {
|
|
||||||
employees.push(createEmployee())
|
|
||||||
}
|
}
|
||||||
return tree_view.createItem(randomDepartment(), true, employees)
|
|
||||||
}
|
|
||||||
|
|
||||||
function createOrg(numLevels, numSubtrees, numEmployees) {
|
FluText{
|
||||||
if (numLevels === 0) {
|
text:"共计%1条数据,当前显示的%2条数据".arg(tree_view.count()).arg(tree_view.visibleCount())
|
||||||
return []
|
}
|
||||||
|
|
||||||
|
FluText{
|
||||||
|
text:"共计选中%1条数据".arg(tree_view.selectionModel().length)
|
||||||
}
|
}
|
||||||
var subtrees = []
|
|
||||||
for (var i = 0; i < numSubtrees; i++) {
|
|
||||||
subtrees.push(createSubtree(numEmployees))
|
|
||||||
}
|
|
||||||
return [tree_view.createItem(randomCompany(), true, subtrees)].concat(createOrg(numLevels - 1, numSubtrees, numEmployees))
|
|
||||||
}
|
|
||||||
|
|
||||||
FluArea{
|
|
||||||
id:layout_actions
|
|
||||||
Layout.fillWidth: true
|
|
||||||
Layout.topMargin: 20
|
|
||||||
height: 50
|
|
||||||
paddings: 10
|
|
||||||
RowLayout{
|
RowLayout{
|
||||||
spacing: 14
|
spacing: 10
|
||||||
FluDropDownButton{
|
FluText{
|
||||||
id:btn_selection_model
|
text:"cellHeight:"
|
||||||
Layout.preferredWidth: 140
|
Layout.alignment: Qt.AlignVCenter
|
||||||
text:"None"
|
|
||||||
FluMenuItem{
|
|
||||||
text:"None"
|
|
||||||
onClicked: {
|
|
||||||
btn_selection_model.text = text
|
|
||||||
tree_view.selectionMode = FluTabViewType.Equal
|
|
||||||
}
|
|
||||||
}
|
|
||||||
FluMenuItem{
|
|
||||||
text:"Single"
|
|
||||||
onClicked: {
|
|
||||||
btn_selection_model.text = text
|
|
||||||
tree_view.selectionMode = FluTabViewType.SizeToContent
|
|
||||||
}
|
|
||||||
}
|
|
||||||
FluMenuItem{
|
|
||||||
text:"Muiltple"
|
|
||||||
onClicked: {
|
|
||||||
btn_selection_model.text = text
|
|
||||||
tree_view.selectionMode = FluTabViewType.Compact
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
FluFilledButton{
|
FluSlider{
|
||||||
text:"获取选中的数据"
|
id:slider_cell_height
|
||||||
onClicked: {
|
value: 30
|
||||||
if(tree_view.selectionMode === FluTreeViewType.None){
|
from: 30
|
||||||
showError("当前非选择模式,没有选中的数据")
|
to:100
|
||||||
}
|
}
|
||||||
if(tree_view.selectionMode === FluTreeViewType.Single){
|
}
|
||||||
if(!tree_view.signleData()){
|
RowLayout{
|
||||||
showError("没有选中数据")
|
spacing: 10
|
||||||
return
|
FluText{
|
||||||
}
|
text:"depthPadding:"
|
||||||
showSuccess(tree_view.signleData().text)
|
Layout.alignment: Qt.AlignVCenter
|
||||||
}
|
}
|
||||||
if(tree_view.selectionMode === FluTreeViewType.Multiple){
|
FluSlider{
|
||||||
if(tree_view.multipData().length===0){
|
id:slider_depth_padding
|
||||||
showError("没有选中数据")
|
value: 30
|
||||||
return
|
from: 30
|
||||||
}
|
to:100
|
||||||
var info = []
|
}
|
||||||
tree_view.multipData().map((value)=>info.push(value.text))
|
}
|
||||||
showSuccess(info.join(","))
|
FluToggleSwitch{
|
||||||
}
|
id:switch_showline
|
||||||
}
|
text:"showLine"
|
||||||
|
checked: false
|
||||||
|
}
|
||||||
|
FluToggleSwitch{
|
||||||
|
id:switch_draggable
|
||||||
|
text:"draggable"
|
||||||
|
checked: false
|
||||||
|
}
|
||||||
|
FluToggleSwitch{
|
||||||
|
id:switch_checkable
|
||||||
|
text:"checkable"
|
||||||
|
checked: false
|
||||||
|
}
|
||||||
|
FluButton{
|
||||||
|
text:"all expand"
|
||||||
|
onClicked: {
|
||||||
|
tree_view.allExpand()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluButton{
|
||||||
|
text:"all collapse"
|
||||||
|
onClicked: {
|
||||||
|
tree_view.allCollapse()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
FluArea{
|
FluArea{
|
||||||
Layout.fillWidth: true
|
anchors{
|
||||||
Layout.topMargin: 10
|
left: layout_column.right
|
||||||
paddings: 10
|
top: parent.top
|
||||||
height: 400
|
bottom: parent.bottom
|
||||||
|
right: parent.right
|
||||||
|
rightMargin: 5
|
||||||
|
topMargin: 5
|
||||||
|
bottomMargin: 5
|
||||||
|
}
|
||||||
|
FluShadow{}
|
||||||
FluTreeView{
|
FluTreeView{
|
||||||
id:tree_view
|
id:tree_view
|
||||||
width:240
|
anchors.fill: parent
|
||||||
anchors{
|
cellHeight: slider_cell_height.value
|
||||||
top:parent.top
|
draggable:switch_draggable.checked
|
||||||
left:parent.left
|
showLine: switch_showline.checked
|
||||||
bottom:parent.bottom
|
checkable:switch_checkable.checked
|
||||||
}
|
depthPadding: slider_depth_padding.value
|
||||||
onItemClicked:
|
|
||||||
(model)=>{
|
|
||||||
showSuccess(model.text)
|
|
||||||
}
|
|
||||||
|
|
||||||
Component.onCompleted: {
|
Component.onCompleted: {
|
||||||
var org = createOrg(3, 3, 3)
|
var data = treeData()
|
||||||
createItem()
|
dataSource = data
|
||||||
updateData(org)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
CodeExpander{
|
|
||||||
Layout.fillWidth: true
|
|
||||||
Layout.topMargin: -1
|
|
||||||
code:'FluTreeView{
|
|
||||||
id:tree_view
|
|
||||||
width:240
|
|
||||||
height:600
|
|
||||||
Component.onCompleted: {
|
|
||||||
var datas = []
|
|
||||||
datas.push(createItem("Node1",false))
|
|
||||||
datas.push(createItem("Node2",false))
|
|
||||||
datas.push(createItem("Node2",true,[createItem("Node2-1",false),createItem("Node2-2",false)]))
|
|
||||||
updateData(datas)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
'
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -29,6 +29,7 @@ FluContentPage{
|
|||||||
FluTextBox{
|
FluTextBox{
|
||||||
id:text_box
|
id:text_box
|
||||||
text:"会磨刀的小猪"
|
text:"会磨刀的小猪"
|
||||||
|
Layout.preferredWidth: 240
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
14
example/qml-Qt6/viewmodel/SettingsViewModel.qml
Normal file
14
example/qml-Qt6/viewmodel/SettingsViewModel.qml
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
import QtQuick
|
||||||
|
import FluentUI
|
||||||
|
|
||||||
|
FluViewModel{
|
||||||
|
|
||||||
|
objectName: "SettingsViewModel"
|
||||||
|
scope: FluViewModelType.Application
|
||||||
|
property int displayMode
|
||||||
|
|
||||||
|
onInitData: {
|
||||||
|
displayMode = FluNavigationViewType.Auto
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
8
example/qml-Qt6/viewmodel/TextBoxViewModel.qml
Normal file
8
example/qml-Qt6/viewmodel/TextBoxViewModel.qml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
import QtQuick
|
||||||
|
import FluentUI
|
||||||
|
|
||||||
|
FluViewModel {
|
||||||
|
objectName: "TextBoxView"
|
||||||
|
property string text1
|
||||||
|
property string text2
|
||||||
|
}
|
@ -4,7 +4,7 @@ import QtQuick.Layouts
|
|||||||
import FluentUI
|
import FluentUI
|
||||||
import "qrc:///example/qml/component"
|
import "qrc:///example/qml/component"
|
||||||
|
|
||||||
CustomWindow {
|
FluWindow {
|
||||||
|
|
||||||
id:window
|
id:window
|
||||||
title:"关于"
|
title:"关于"
|
||||||
@ -35,7 +35,7 @@ CustomWindow {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
FluText{
|
FluText{
|
||||||
text:"v%1".arg(appInfo.version)
|
text:"v%1".arg(AppInfo.version)
|
||||||
font: FluTextStyle.Body
|
font: FluTextStyle.Body
|
||||||
Layout.alignment: Qt.AlignBottom
|
Layout.alignment: Qt.AlignBottom
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,7 @@ import FluentUI
|
|||||||
import example
|
import example
|
||||||
import "qrc:///example/qml/component"
|
import "qrc:///example/qml/component"
|
||||||
|
|
||||||
CustomWindow {
|
FluWindow {
|
||||||
|
|
||||||
id:window
|
id:window
|
||||||
title:"热加载"
|
title:"热加载"
|
||||||
@ -60,11 +60,11 @@ CustomWindow {
|
|||||||
event.accepted = false
|
event.accepted = false
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if (event.urls.length !== 1) {
|
var url = getUrlByEvent(event)
|
||||||
|
if(url === ""){
|
||||||
event.accepted = false
|
event.accepted = false
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
var url = event.urls[0].toString()
|
|
||||||
var fileExtension = url.substring(url.lastIndexOf(".") + 1)
|
var fileExtension = url.substring(url.lastIndexOf(".") + 1)
|
||||||
if (fileExtension !== "qml") {
|
if (fileExtension !== "qml") {
|
||||||
event.accepted = false
|
event.accepted = false
|
||||||
@ -74,12 +74,24 @@ CustomWindow {
|
|||||||
}
|
}
|
||||||
onDropped:
|
onDropped:
|
||||||
(event)=>{
|
(event)=>{
|
||||||
var path = event.urls[0].toString()
|
var url = getUrlByEvent(event)
|
||||||
loader.source = path
|
if(url !== ""){
|
||||||
watcher.path = path
|
loader.source = url
|
||||||
loader.reload()
|
watcher.path = url
|
||||||
|
loader.reload()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getUrlByEvent(event){
|
||||||
|
var url = ""
|
||||||
|
if (event.urls.length === 0) {
|
||||||
|
url = "file:///"+event.getDataAsString("text/plain")
|
||||||
|
}else{
|
||||||
|
url = event.urls[0].toString()
|
||||||
|
}
|
||||||
|
return url
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,7 @@ import QtQuick.Controls
|
|||||||
import FluentUI
|
import FluentUI
|
||||||
import "qrc:///example/qml/component"
|
import "qrc:///example/qml/component"
|
||||||
|
|
||||||
CustomWindow {
|
FluWindow {
|
||||||
|
|
||||||
id:window
|
id:window
|
||||||
title:"登录"
|
title:"登录"
|
||||||
|
@ -7,28 +7,51 @@ import FluentUI
|
|||||||
import example
|
import example
|
||||||
import "qrc:///example/qml/component"
|
import "qrc:///example/qml/component"
|
||||||
import "qrc:///example/qml/global"
|
import "qrc:///example/qml/global"
|
||||||
|
import "qrc:///example/qml/viewmodel"
|
||||||
|
|
||||||
CustomWindow {
|
FluWindow {
|
||||||
|
|
||||||
id:window
|
id:window
|
||||||
title: "FluentUI"
|
title: "FluentUI"
|
||||||
width: 1000
|
width: 1000
|
||||||
height: 640
|
height: 640
|
||||||
closeDestory:false
|
|
||||||
minimumWidth: 520
|
minimumWidth: 520
|
||||||
minimumHeight: 200
|
minimumHeight: 200
|
||||||
appBarVisible: false
|
|
||||||
launchMode: FluWindowType.SingleTask
|
launchMode: FluWindowType.SingleTask
|
||||||
|
fitsAppBarWindows: true
|
||||||
|
appBar: FluAppBar {
|
||||||
|
width: window.width
|
||||||
|
height: 30
|
||||||
|
darkText: Lang.dark_mode
|
||||||
|
showDark: true
|
||||||
|
darkClickListener:(button)=>handleDarkChanged(button)
|
||||||
|
closeClickListener: ()=>{dialog_close.open()}
|
||||||
|
z:7
|
||||||
|
}
|
||||||
|
|
||||||
closeFunc:function(event){
|
SettingsViewModel{
|
||||||
dialog_close.open()
|
id:viewmodel_settings
|
||||||
event.accepted = false
|
}
|
||||||
|
|
||||||
|
FluEvent{
|
||||||
|
id:event_checkupdate
|
||||||
|
name: "checkUpdate"
|
||||||
|
onTriggered: {
|
||||||
|
checkUpdate(false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onFirstVisible: {
|
||||||
|
tour.open()
|
||||||
}
|
}
|
||||||
|
|
||||||
Component.onCompleted: {
|
Component.onCompleted: {
|
||||||
FluTools.setQuitOnLastWindowClosed(false)
|
checkUpdate(true)
|
||||||
tour.open()
|
FluEventBus.registerEvent(event_checkupdate)
|
||||||
checkUpdate()
|
}
|
||||||
|
|
||||||
|
Component.onDestruction: {
|
||||||
|
FluEventBus.unRegisterEvent(event_checkupdate)
|
||||||
}
|
}
|
||||||
|
|
||||||
SystemTrayIcon {
|
SystemTrayIcon {
|
||||||
@ -40,8 +63,7 @@ CustomWindow {
|
|||||||
MenuItem {
|
MenuItem {
|
||||||
text: "退出"
|
text: "退出"
|
||||||
onTriggered: {
|
onTriggered: {
|
||||||
window.deleteWindow()
|
FluApp.exit()
|
||||||
FluApp.closeApp()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -55,21 +77,43 @@ CustomWindow {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Timer{
|
||||||
|
id:timer_window_hide_delay
|
||||||
|
interval: 150
|
||||||
|
onTriggered: {
|
||||||
|
window.hide()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
FluContentDialog{
|
FluContentDialog{
|
||||||
id:dialog_close
|
id:dialog_close
|
||||||
title:"退出"
|
title:"退出"
|
||||||
message:"确定要退出程序吗?"
|
message:"确定要退出程序吗?"
|
||||||
negativeText:"最小化"
|
negativeText:"最小化"
|
||||||
buttonFlags: FluContentDialogType.NegativeButton | FluContentDialogType.NeutralButton | FluContentDialogType.PositiveButton
|
buttonFlags: FluContentDialogType.NegativeButton | FluContentDialogType.NeutralButton | FluContentDialogType.PositiveButton
|
||||||
onNegativeClicked:{
|
onNegativeClicked: {
|
||||||
window.hide()
|
|
||||||
system_tray.showMessage("友情提示","FluentUI已隐藏至托盘,点击托盘可再次激活窗口");
|
system_tray.showMessage("友情提示","FluentUI已隐藏至托盘,点击托盘可再次激活窗口");
|
||||||
|
timer_window_hide_delay.restart()
|
||||||
}
|
}
|
||||||
positiveText:"退出"
|
positiveText:"退出"
|
||||||
neutralText:"取消"
|
neutralText:"取消"
|
||||||
onPositiveClicked:{
|
onPositiveClicked:{
|
||||||
window.deleteWindow()
|
FluApp.exit(0)
|
||||||
FluApp.closeApp()
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Component{
|
||||||
|
id:nav_item_right_menu
|
||||||
|
FluMenu{
|
||||||
|
id:menu
|
||||||
|
width: 130
|
||||||
|
FluMenuItem{
|
||||||
|
text: "在独立窗口打开"
|
||||||
|
visible: true
|
||||||
|
onClicked: {
|
||||||
|
FluApp.navigate("/pageWindow",{title:modelData.title,url:modelData.url})
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -96,18 +140,8 @@ CustomWindow {
|
|||||||
back: Item{
|
back: Item{
|
||||||
anchors.fill: flipable
|
anchors.fill: flipable
|
||||||
visible: flipable.flipAngle !== 0
|
visible: flipable.flipAngle !== 0
|
||||||
FluAppBar {
|
|
||||||
anchors {
|
|
||||||
top: parent.top
|
|
||||||
left: parent.left
|
|
||||||
right: parent.right
|
|
||||||
}
|
|
||||||
darkText: lang.dark_mode
|
|
||||||
showDark: true
|
|
||||||
z:7
|
|
||||||
darkClickListener:(button)=>handleDarkChanged(button)
|
|
||||||
}
|
|
||||||
Row{
|
Row{
|
||||||
|
id:layout_back_buttons
|
||||||
z:8
|
z:8
|
||||||
anchors{
|
anchors{
|
||||||
top: parent.top
|
top: parent.top
|
||||||
@ -138,25 +172,13 @@ CustomWindow {
|
|||||||
id:loader
|
id:loader
|
||||||
lazy: true
|
lazy: true
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
source: "https://zhu-zichu.gitee.io/Qt6_155_LieflatPage.qml"
|
source: "https://zhu-zichu.gitee.io/Qt_163_LieflatPage.qml"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
front: Item{
|
front: Item{
|
||||||
id:page_front
|
id:page_front
|
||||||
visible: flipable.flipAngle !== 180
|
visible: flipable.flipAngle !== 180
|
||||||
anchors.fill: flipable
|
anchors.fill: flipable
|
||||||
FluAppBar {
|
|
||||||
id:app_bar_front
|
|
||||||
anchors {
|
|
||||||
top: parent.top
|
|
||||||
left: parent.left
|
|
||||||
right: parent.right
|
|
||||||
}
|
|
||||||
darkText: lang.dark_mode
|
|
||||||
showDark: true
|
|
||||||
darkClickListener:(button)=>handleDarkChanged(button)
|
|
||||||
z:7
|
|
||||||
}
|
|
||||||
FluNavigationView{
|
FluNavigationView{
|
||||||
property int clickCount: 0
|
property int clickCount: 0
|
||||||
id:nav_view
|
id:nav_view
|
||||||
@ -164,13 +186,13 @@ CustomWindow {
|
|||||||
height: parent.height
|
height: parent.height
|
||||||
z:999
|
z:999
|
||||||
//Stack模式,每次切换都会将页面压入栈中,随着栈的页面增多,消耗的内存也越多,内存消耗多就会卡顿,这时候就需要按返回将页面pop掉,释放内存。该模式可以配合FluPage中的launchMode属性,设置页面的启动模式
|
//Stack模式,每次切换都会将页面压入栈中,随着栈的页面增多,消耗的内存也越多,内存消耗多就会卡顿,这时候就需要按返回将页面pop掉,释放内存。该模式可以配合FluPage中的launchMode属性,设置页面的启动模式
|
||||||
pageMode: FluNavigationViewType.Stack
|
// pageMode: FluNavigationViewType.Stack
|
||||||
//NoStack模式,每次切换都会销毁之前的页面然后创建一个新的页面,只需消耗少量内存(推荐)
|
//NoStack模式,每次切换都会销毁之前的页面然后创建一个新的页面,只需消耗少量内存,可以配合FluViewModel保存页面数据(推荐)
|
||||||
// pageMode: FluNavigationViewType.NoStack
|
pageMode: FluNavigationViewType.NoStack
|
||||||
items: ItemsOriginal
|
items: ItemsOriginal
|
||||||
footerItems:ItemsFooter
|
footerItems:ItemsFooter
|
||||||
topPadding:FluTools.isMacos() ? 20 : 0
|
topPadding:FluTools.isMacos() ? 20 : 0
|
||||||
displayMode:MainEvent.displayMode
|
displayMode:viewmodel_settings.displayMode
|
||||||
logo: "qrc:/example/res/image/favicon.ico"
|
logo: "qrc:/example/res/image/favicon.ico"
|
||||||
title:"FluentUI"
|
title:"FluentUI"
|
||||||
onLogoClicked:{
|
onLogoClicked:{
|
||||||
@ -183,11 +205,9 @@ CustomWindow {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
autoSuggestBox:FluAutoSuggestBox{
|
autoSuggestBox:FluAutoSuggestBox{
|
||||||
width: 280
|
|
||||||
anchors.centerIn: parent
|
|
||||||
iconSource: FluentIcons.Search
|
iconSource: FluentIcons.Search
|
||||||
items: ItemsOriginal.getSearchData()
|
items: ItemsOriginal.getSearchData()
|
||||||
placeholderText: lang.search
|
placeholderText: Lang.search
|
||||||
onItemClicked:
|
onItemClicked:
|
||||||
(data)=>{
|
(data)=>{
|
||||||
ItemsOriginal.startPageByItem(data)
|
ItemsOriginal.startPageByItem(data)
|
||||||
@ -195,7 +215,9 @@ CustomWindow {
|
|||||||
}
|
}
|
||||||
Component.onCompleted: {
|
Component.onCompleted: {
|
||||||
ItemsOriginal.navigationView = nav_view
|
ItemsOriginal.navigationView = nav_view
|
||||||
|
ItemsOriginal.paneItemMenu = nav_item_right_menu
|
||||||
ItemsFooter.navigationView = nav_view
|
ItemsFooter.navigationView = nav_view
|
||||||
|
ItemsFooter.paneItemMenu = nav_item_right_menu
|
||||||
setCurrentIndex(0)
|
setCurrentIndex(0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -218,7 +240,7 @@ CustomWindow {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Loader{
|
FluLoader{
|
||||||
id:loader_reveal
|
id:loader_reveal
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
}
|
}
|
||||||
@ -228,7 +250,7 @@ CustomWindow {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function handleDarkChanged(button){
|
function handleDarkChanged(button){
|
||||||
if(FluTools.isMacos() || !FluTheme.enableAnimation){
|
if(!FluTheme.enableAnimation || window.fitsAppBarWindows === false){
|
||||||
changeDark()
|
changeDark()
|
||||||
}else{
|
}else{
|
||||||
loader_reveal.sourceComponent = com_reveal
|
loader_reveal.sourceComponent = com_reveal
|
||||||
@ -270,14 +292,14 @@ CustomWindow {
|
|||||||
|
|
||||||
FluTour{
|
FluTour{
|
||||||
id:tour
|
id:tour
|
||||||
steps:[
|
steps:{
|
||||||
{title:"夜间模式",description: "这里可以切换夜间模式.",target:()=>app_bar_front.darkButton()},
|
var data = []
|
||||||
{title:"隐藏彩蛋",description: "多点几下试试!!",target:()=>nav_view.logoButton()}
|
if(!window.useSystemAppBar){
|
||||||
]
|
data.push({title:"夜间模式",description: "这里可以切换夜间模式.",target:()=>appBar.darkButton()})
|
||||||
}
|
}
|
||||||
|
data.push({title:"隐藏彩蛋",description: "多点几下试试!!",target:()=>nav_view.logoButton()})
|
||||||
FluHttp{
|
return data
|
||||||
id:http
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FpsItem{
|
FpsItem{
|
||||||
@ -300,7 +322,7 @@ CustomWindow {
|
|||||||
property string body
|
property string body
|
||||||
id:dialog_update
|
id:dialog_update
|
||||||
title:"升级提示"
|
title:"升级提示"
|
||||||
message:"FluentUI目前最新版本 "+ newVerson +" -- 当前应用版本 "+appInfo.version+" \n现在是否去下载新版本?\n\n更新内容:\n"+body
|
message:"FluentUI目前最新版本 "+ newVerson +" -- 当前应用版本 "+AppInfo.version+" \n现在是否去下载新版本?\n\n更新内容:\n"+body
|
||||||
buttonFlags: FluContentDialogType.NegativeButton | FluContentDialogType.PositiveButton
|
buttonFlags: FluContentDialogType.NegativeButton | FluContentDialogType.PositiveButton
|
||||||
negativeText: "取消"
|
negativeText: "取消"
|
||||||
positiveText:"确定"
|
positiveText:"确定"
|
||||||
@ -309,28 +331,44 @@ CustomWindow {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function checkUpdate(){
|
FluNetworkCallable{
|
||||||
var callable = {}
|
id:callable
|
||||||
callable.onStart = function(){
|
property bool silent: true
|
||||||
|
onStart: {
|
||||||
console.debug("satrt check update...")
|
console.debug("satrt check update...")
|
||||||
}
|
}
|
||||||
callable.onFinish = function(){
|
onFinish: {
|
||||||
console.debug("check update finish")
|
console.debug("check update finish")
|
||||||
|
FluEventBus.post("checkUpdateFinish");
|
||||||
}
|
}
|
||||||
callable.onSuccess = function(result){
|
onSuccess:
|
||||||
var data = JSON.parse(result)
|
(result)=>{
|
||||||
console.debug("current version "+appInfo.version)
|
var data = JSON.parse(result)
|
||||||
console.debug("new version "+data.tag_name)
|
console.debug("current version "+AppInfo.version)
|
||||||
if(data.tag_name !== appInfo.version){
|
console.debug("new version "+data.tag_name)
|
||||||
dialog_update.newVerson = data.tag_name
|
if(data.tag_name !== AppInfo.version){
|
||||||
dialog_update.body = data.body
|
dialog_update.newVerson = data.tag_name
|
||||||
dialog_update.open()
|
dialog_update.body = data.body
|
||||||
|
dialog_update.open()
|
||||||
|
}else{
|
||||||
|
if(!silent){
|
||||||
|
showInfo("当前版本已经是最新版")
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
onError:
|
||||||
callable.onError = function(status,errorString){
|
(status,errorString)=>{
|
||||||
console.debug(status+";"+errorString)
|
if(!silent){
|
||||||
}
|
showError("网络异常!")
|
||||||
http.get("https://api.github.com/repos/zhuzichu520/FluentUI/releases/latest",callable)
|
}
|
||||||
|
console.debug(status+";"+errorString)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function checkUpdate(silent){
|
||||||
|
callable.silent = silent
|
||||||
|
FluNetwork.get("https://api.github.com/repos/zhuzichu520/FluentUI/releases/latest")
|
||||||
|
.go(callable)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,7 @@ import FluentUI
|
|||||||
import example
|
import example
|
||||||
import "qrc:///example/qml/component"
|
import "qrc:///example/qml/component"
|
||||||
|
|
||||||
CustomWindow {
|
FluWindow {
|
||||||
|
|
||||||
id:window
|
id:window
|
||||||
width: 800
|
width: 800
|
||||||
@ -18,7 +18,7 @@ CustomWindow {
|
|||||||
window.title = arg.title
|
window.title = arg.title
|
||||||
loader.setSource( arg.url,{animDisabled:true})
|
loader.setSource( arg.url,{animDisabled:true})
|
||||||
}
|
}
|
||||||
Loader{
|
FluLoader{
|
||||||
id: loader
|
id: loader
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,7 @@ import QtQuick.Layouts
|
|||||||
import FluentUI
|
import FluentUI
|
||||||
import "qrc:///example/qml/component"
|
import "qrc:///example/qml/component"
|
||||||
|
|
||||||
CustomWindow {
|
FluWindow {
|
||||||
|
|
||||||
id:window
|
id:window
|
||||||
title:"SingleInstance"
|
title:"SingleInstance"
|
||||||
|
@ -4,7 +4,7 @@ import QtQuick.Layouts
|
|||||||
import FluentUI
|
import FluentUI
|
||||||
import "qrc:///example/qml/component"
|
import "qrc:///example/qml/component"
|
||||||
|
|
||||||
CustomWindow {
|
FluWindow {
|
||||||
|
|
||||||
id:window
|
id:window
|
||||||
title:"SingleTask"
|
title:"SingleTask"
|
||||||
|
@ -4,7 +4,7 @@ import QtQuick.Layouts
|
|||||||
import FluentUI
|
import FluentUI
|
||||||
import "qrc:///example/qml/component"
|
import "qrc:///example/qml/component"
|
||||||
|
|
||||||
CustomWindow {
|
FluWindow {
|
||||||
|
|
||||||
id:window
|
id:window
|
||||||
title:"Standard"
|
title:"Standard"
|
||||||
|
@ -4,29 +4,34 @@ import QtQuick.Controls 2.15
|
|||||||
import QtQuick.Layouts 1.15
|
import QtQuick.Layouts 1.15
|
||||||
import FluentUI 1.0
|
import FluentUI 1.0
|
||||||
|
|
||||||
Window {
|
Item {
|
||||||
id: app
|
id: app
|
||||||
flags: Qt.SplashScreen
|
|
||||||
|
|
||||||
FluHttpInterceptor{
|
Connections{
|
||||||
id:interceptor
|
target: FluTheme
|
||||||
function onIntercept(request){
|
function onDarkModeChanged(){
|
||||||
if(request.method === "get"){
|
SettingsHelper.saveDarkMode(FluTheme.darkMode)
|
||||||
request.params["method"] = "get"
|
}
|
||||||
}
|
}
|
||||||
if(request.method === "post"){
|
|
||||||
request.params["method"] = "post"
|
Connections{
|
||||||
}
|
target: FluApp
|
||||||
request.headers["token"] ="yyds"
|
function onVsyncChanged(){
|
||||||
request.headers["os"] ="pc"
|
SettingsHelper.saveVsync(FluApp.vsync)
|
||||||
console.debug(JSON.stringify(request))
|
}
|
||||||
return request
|
function onUseSystemAppBarChanged(){
|
||||||
|
SettingsHelper.saveUseSystemAppBar(FluApp.useSystemAppBar)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Component.onCompleted: {
|
Component.onCompleted: {
|
||||||
|
FluNetwork.setInterceptor(function(param){
|
||||||
|
param.addHeader("Token","000000000000000000000")
|
||||||
|
})
|
||||||
FluApp.init(app)
|
FluApp.init(app)
|
||||||
FluTheme.darkMode = FluThemeType.System
|
FluApp.useSystemAppBar = SettingsHelper.getUseSystemAppBar()
|
||||||
|
FluApp.vsync = SettingsHelper.getVsync()
|
||||||
|
FluTheme.darkMode = SettingsHelper.getDarkMode()
|
||||||
FluTheme.enableAnimation = true
|
FluTheme.enableAnimation = true
|
||||||
FluApp.routes = {
|
FluApp.routes = {
|
||||||
"/":"qrc:/example/qml/window/MainWindow.qml",
|
"/":"qrc:/example/qml/window/MainWindow.qml",
|
||||||
@ -39,7 +44,6 @@ Window {
|
|||||||
"/pageWindow":"qrc:/example/qml/window/PageWindow.qml"
|
"/pageWindow":"qrc:/example/qml/window/PageWindow.qml"
|
||||||
}
|
}
|
||||||
FluApp.initialRoute = "/"
|
FluApp.initialRoute = "/"
|
||||||
FluApp.httpInterceptor = interceptor
|
|
||||||
FluApp.run()
|
FluApp.run()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -80,7 +80,6 @@ FluExpander{
|
|||||||
"FluIcon",
|
"FluIcon",
|
||||||
"FluIconButton",
|
"FluIconButton",
|
||||||
"FluInfoBar",
|
"FluInfoBar",
|
||||||
"FluItem",
|
|
||||||
"FluMediaPlayer",
|
"FluMediaPlayer",
|
||||||
"FluMenu",
|
"FluMenu",
|
||||||
"FluMenuItem",
|
"FluMenuItem",
|
||||||
@ -131,14 +130,18 @@ FluExpander{
|
|||||||
"FluRadioButtons",
|
"FluRadioButtons",
|
||||||
"FluImage",
|
"FluImage",
|
||||||
"FluSpinBox",
|
"FluSpinBox",
|
||||||
"FluHttp",
|
|
||||||
"FluWatermark",
|
"FluWatermark",
|
||||||
"FluTour",
|
"FluTour",
|
||||||
"FluQRCode",
|
"FluQRCode",
|
||||||
"FluTimeline",
|
"FluTimeline",
|
||||||
"FluChart",
|
"FluChart",
|
||||||
"FluRangeSlider",
|
"FluRangeSlider",
|
||||||
"FluStaggeredView"
|
"FluStaggeredView",
|
||||||
|
"FluProgressButton",
|
||||||
|
"FluLoadingButton",
|
||||||
|
"FluClip",
|
||||||
|
"FluNetwork",
|
||||||
|
"FluShortcutPicker"
|
||||||
];
|
];
|
||||||
code = code.replace(/\n/g, "<br>");
|
code = code.replace(/\n/g, "<br>");
|
||||||
code = code.replace(/ /g, " ");
|
code = code.replace(/ /g, " ");
|
||||||
|
@ -1,64 +0,0 @@
|
|||||||
import QtQuick 2.15
|
|
||||||
import QtQuick.Layouts 1.15
|
|
||||||
import FluentUI 1.0
|
|
||||||
import org.wangwenx190.FramelessHelper 1.0
|
|
||||||
|
|
||||||
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
|
|
||||||
icon:"qrc:/example/res/image/favicon.ico"
|
|
||||||
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)
|
|
||||||
moveWindowToDesktopCenter()
|
|
||||||
setHitTestVisible(title_bar.minimizeButton())
|
|
||||||
setHitTestVisible(title_bar.maximizeButton())
|
|
||||||
setHitTestVisible(title_bar.closeButton())
|
|
||||||
setWindowFixedSize(fixSize)
|
|
||||||
title_bar.maximizeButton.visible = !fixSize
|
|
||||||
if (blurBehindWindowEnabled)
|
|
||||||
window.background = undefined
|
|
||||||
window.show()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Connections{
|
|
||||||
target: FluTheme
|
|
||||||
function onDarkChanged(){
|
|
||||||
if (FluTheme.dark)
|
|
||||||
FramelessUtils.systemTheme = FramelessHelperConstants.Dark
|
|
||||||
else
|
|
||||||
FramelessUtils.systemTheme = FramelessHelperConstants.Light
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function setHitTestVisible(com){
|
|
||||||
framless_helper.setHitTestVisible(com)
|
|
||||||
}
|
|
||||||
function setTitleBarItem(com){
|
|
||||||
framless_helper.setTitleBarItem(com)
|
|
||||||
}
|
|
||||||
}
|
|
@ -6,25 +6,25 @@ import FluentUI 1.0
|
|||||||
FluObject{
|
FluObject{
|
||||||
|
|
||||||
property var navigationView
|
property var navigationView
|
||||||
|
property var paneItemMenu
|
||||||
|
|
||||||
id:footer_items
|
id:footer_items
|
||||||
|
|
||||||
FluPaneItemSeparator{}
|
FluPaneItemSeparator{}
|
||||||
|
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:lang.about
|
title:Lang.about
|
||||||
icon:FluentIcons.Contact
|
icon:FluentIcons.Contact
|
||||||
onDropped: { FluApp.navigate("/about") }
|
|
||||||
onTapListener:function(){
|
onTapListener:function(){
|
||||||
FluApp.navigate("/about")
|
FluApp.navigate("/about")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:lang.settings
|
title:Lang.settings
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
icon:FluentIcons.Settings
|
icon:FluentIcons.Settings
|
||||||
url:"qrc:/example/qml/page/T_Settings.qml"
|
url:"qrc:/example/qml/page/T_Settings.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{
|
onTap:{
|
||||||
navigationView.push(url)
|
navigationView.push(url)
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,7 @@ import FluentUI 1.0
|
|||||||
FluObject{
|
FluObject{
|
||||||
|
|
||||||
property var navigationView
|
property var navigationView
|
||||||
|
property var paneItemMenu
|
||||||
|
|
||||||
function rename(item, newName){
|
function rename(item, newName){
|
||||||
if(newName && newName.trim().length>0){
|
if(newName && newName.trim().length>0){
|
||||||
@ -16,51 +17,31 @@ FluObject{
|
|||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
id:item_home
|
id:item_home
|
||||||
count: 9
|
count: 9
|
||||||
title:lang.home
|
title:Lang.home
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
infoBadge:FluBadge{
|
infoBadge:FluBadge{
|
||||||
count: item_home.count
|
count: item_home.count
|
||||||
}
|
}
|
||||||
icon:FluentIcons.Home
|
icon:FluentIcons.Home
|
||||||
url:"qrc:/example/qml/page/T_Home.qml"
|
url:"qrc:/example/qml/page/T_Home.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{
|
onTap:{
|
||||||
if(navigationView.getCurrentUrl()){
|
if(navigationView.getCurrentUrl()){
|
||||||
item_home.count = 0
|
item_home.count = 0
|
||||||
}
|
}
|
||||||
navigationView.push(url)
|
navigationView.push(url)
|
||||||
}
|
}
|
||||||
editDelegate: FluTextBox{
|
}
|
||||||
text:item_home.title
|
|
||||||
}
|
FluPaneItemExpander{
|
||||||
menuDelegate: FluMenu{
|
title:"PaneItemExpander Disabled"
|
||||||
id:nav_item_right_menu
|
iconVisible: false
|
||||||
width: 120
|
disabled: true
|
||||||
FluMenuItem{
|
|
||||||
text: "重命名"
|
|
||||||
visible: true
|
|
||||||
onClicked: {
|
|
||||||
item_home.showEdit = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
FluPaneItemExpander{
|
FluPaneItemExpander{
|
||||||
id:item_expander_basic_input
|
id:item_expander_basic_input
|
||||||
title:lang.basic_input
|
title:Lang.basic_input
|
||||||
icon:FluentIcons.CheckboxComposite
|
icon:FluentIcons.CheckboxComposite
|
||||||
editDelegate: FluTextBox{
|
|
||||||
text:item_expander_basic_input.title
|
|
||||||
}
|
|
||||||
menuDelegate: FluMenu{
|
|
||||||
FluMenuItem{
|
|
||||||
text: "重命名"
|
|
||||||
visible: true
|
|
||||||
onClicked: {
|
|
||||||
item_expander_basic_input.showEdit = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
id:item_buttons
|
id:item_buttons
|
||||||
count: 99
|
count: 99
|
||||||
@ -68,11 +49,11 @@ FluObject{
|
|||||||
count: item_buttons.count
|
count: item_buttons.count
|
||||||
}
|
}
|
||||||
title:"Buttons"
|
title:"Buttons"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
image:"qrc:/example/res/image/control/Button.png"
|
image:"qrc:/example/res/image/control/Button.png"
|
||||||
recentlyUpdated:true
|
recentlyUpdated:true
|
||||||
desc:"A control that responds to user input and raisesa Click event."
|
desc:"A control that responds to user input and raisesa Click event."
|
||||||
url:"qrc:/example/qml/page/T_Buttons.qml"
|
url:"qrc:/example/qml/page/T_Buttons.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{
|
onTap:{
|
||||||
item_buttons.count = 0
|
item_buttons.count = 0
|
||||||
navigationView.push(url)
|
navigationView.push(url)
|
||||||
@ -81,175 +62,195 @@ FluObject{
|
|||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
id:item_text
|
id:item_text
|
||||||
title:"Text"
|
title:"Text"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
count: 5
|
count: 5
|
||||||
infoBadge:FluBadge{
|
infoBadge:FluBadge{
|
||||||
count: item_text.count
|
count: item_text.count
|
||||||
color: Qt.rgba(82/255,196/255,26/255,1)
|
color: Qt.rgba(82/255,196/255,26/255,1)
|
||||||
}
|
}
|
||||||
url:"qrc:/example/qml/page/T_Text.qml"
|
url:"qrc:/example/qml/page/T_Text.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
onTap:{
|
||||||
onTap:{ navigationView.push(url) }
|
item_text.count = 0
|
||||||
|
navigationView.push(url)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"Image"
|
title:"Image"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_Image.qml"
|
url:"qrc:/example/qml/page/T_Image.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"Slider"
|
title:"Slider"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
image:"qrc:/example/res/image/control/Slider.png"
|
image:"qrc:/example/res/image/control/Slider.png"
|
||||||
recentlyUpdated:true
|
recentlyUpdated:true
|
||||||
desc:"A control that lets the user select from a rangeof values by moving a Thumb control along atrack."
|
desc:"A control that lets the user select from a rangeof values by moving a Thumb control along atrack."
|
||||||
url:"qrc:/example/qml/page/T_Slider.qml"
|
url:"qrc:/example/qml/page/T_Slider.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"CheckBox"
|
title:"CheckBox"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
image:"qrc:/example/res/image/control/Checkbox.png"
|
image:"qrc:/example/res/image/control/Checkbox.png"
|
||||||
recentlyUpdated:true
|
recentlyUpdated:true
|
||||||
desc:"A control that a user can select or clear."
|
desc:"A control that a user can select or clear."
|
||||||
url:"qrc:/example/qml/page/T_CheckBox.qml"
|
url:"qrc:/example/qml/page/T_CheckBox.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"RadioButton"
|
title:"RadioButton"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_RadioButton.qml"
|
url:"qrc:/example/qml/page/T_RadioButton.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"ToggleSwitch"
|
title:"ToggleSwitch"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_ToggleSwitch.qml"
|
url:"qrc:/example/qml/page/T_ToggleSwitch.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
|
FluPaneItem{
|
||||||
|
title:"PaneItem Disabled"
|
||||||
|
disabled: true
|
||||||
|
icon: FluentIcons.Error
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FluPaneItemExpander{
|
FluPaneItemExpander{
|
||||||
title:lang.form
|
title:Lang.form
|
||||||
icon:FluentIcons.GridView
|
icon:FluentIcons.GridView
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"TextBox"
|
title:"TextBox"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_TextBox.qml"
|
url:"qrc:/example/qml/page/T_TextBox.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"TimePicker"
|
title:"TimePicker"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_TimePicker.qml"
|
url:"qrc:/example/qml/page/T_TimePicker.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"DatePicker"
|
title:"DatePicker"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_DatePicker.qml"
|
url:"qrc:/example/qml/page/T_DatePicker.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"CalendarPicker"
|
title:"CalendarPicker"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_CalendarPicker.qml"
|
url:"qrc:/example/qml/page/T_CalendarPicker.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"ColorPicker"
|
title:"ColorPicker"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_ColorPicker.qml"
|
url:"qrc:/example/qml/page/T_ColorPicker.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
onTap:{ navigationView.push(url) }
|
||||||
|
}
|
||||||
|
FluPaneItem{
|
||||||
|
title:"ShortcutPicker"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
|
url:"qrc:/example/qml/page/T_ShortcutPicker.qml"
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FluPaneItemExpander{
|
FluPaneItemExpander{
|
||||||
title:lang.surface
|
title:Lang.surface
|
||||||
icon:FluentIcons.SurfaceHub
|
icon:FluentIcons.SurfaceHub
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"InfoBar"
|
title:"InfoBar"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
image:"qrc:/example/res/image/control/InfoBar.png"
|
image:"qrc:/example/res/image/control/InfoBar.png"
|
||||||
recentlyUpdated:true
|
recentlyUpdated:true
|
||||||
desc:"An inline message to display app-wide statuschange information."
|
desc:"An inline message to display app-wide statuschange information."
|
||||||
url:"qrc:/example/qml/page/T_InfoBar.qml"
|
url:"qrc:/example/qml/page/T_InfoBar.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"Progress"
|
title:"Progress"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_Progress.qml"
|
url:"qrc:/example/qml/page/T_Progress.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"RatingControl"
|
title:"RatingControl"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_RatingControl.qml"
|
url:"qrc:/example/qml/page/T_RatingControl.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"Badge"
|
title:"Badge"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_Badge.qml"
|
url:"qrc:/example/qml/page/T_Badge.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"Rectangle"
|
title:"Rectangle"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_Rectangle.qml"
|
url:"qrc:/example/qml/page/T_Rectangle.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
onTap:{ navigationView.push(url) }
|
||||||
|
}
|
||||||
|
FluPaneItem{
|
||||||
|
title:"Clip"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
|
url:"qrc:/example/qml/page/T_Clip.qml"
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"StatusView"
|
title:"StatusView"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_StatusView.qml"
|
url:"qrc:/example/qml/page/T_StatusView.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"Carousel"
|
title:"Carousel"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_Carousel.qml"
|
url:"qrc:/example/qml/page/T_Carousel.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"Expander"
|
title:"Expander"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_Expander.qml"
|
url:"qrc:/example/qml/page/T_Expander.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"StaggeredView"
|
title:"StaggeredView"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_StaggeredView.qml"
|
url:"qrc:/example/qml/page/T_StaggeredView.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"Watermark"
|
title:"Watermark"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_Watermark.qml"
|
url:"qrc:/example/qml/page/T_Watermark.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FluPaneItemExpander{
|
FluPaneItemExpander{
|
||||||
title:lang.popus
|
title:Lang.popus
|
||||||
icon:FluentIcons.ButtonMenu
|
icon:FluentIcons.ButtonMenu
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"Dialog"
|
title:"Dialog"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_Dialog.qml"
|
url:"qrc:/example/qml/page/T_Dialog.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
id:item_combobox
|
id:item_combobox
|
||||||
title:"ComboBox"
|
title:"ComboBox"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
count: 9
|
count: 9
|
||||||
infoBadge:FluBadge{
|
infoBadge:FluBadge{
|
||||||
count: item_combobox.count
|
count: item_combobox.count
|
||||||
color: Qt.rgba(250/255,173/255,20/255,1)
|
color: Qt.rgba(250/255,173/255,20/255,1)
|
||||||
}
|
}
|
||||||
url:"qrc:/example/qml/page/T_ComboBox.qml"
|
url:"qrc:/example/qml/page/T_ComboBox.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{
|
onTap:{
|
||||||
item_combobox.count = 0
|
item_combobox.count = 0
|
||||||
navigationView.push("qrc:/example/qml/page/T_ComboBox.qml")
|
navigationView.push("qrc:/example/qml/page/T_ComboBox.qml")
|
||||||
@ -257,112 +258,112 @@ FluObject{
|
|||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"Tooltip"
|
title:"Tooltip"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_Tooltip.qml"
|
url:"qrc:/example/qml/page/T_Tooltip.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"Menu"
|
title:"Menu"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_Menu.qml"
|
url:"qrc:/example/qml/page/T_Menu.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FluPaneItemExpander{
|
FluPaneItemExpander{
|
||||||
title:lang.navigation
|
title:Lang.navigation
|
||||||
icon:FluentIcons.AllApps
|
icon:FluentIcons.AllApps
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"Pivot"
|
title:"Pivot"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
image:"qrc:/example/res/image/control/Pivot.png"
|
image:"qrc:/example/res/image/control/Pivot.png"
|
||||||
recentlyAdded:true
|
recentlyAdded:true
|
||||||
order:3
|
order:3
|
||||||
desc:"Presents information from different sources in atabbed view."
|
desc:"Presents information from different sources in atabbed view."
|
||||||
url:"qrc:/example/qml/page/T_Pivot.qml"
|
url:"qrc:/example/qml/page/T_Pivot.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"BreadcrumbBar"
|
title:"BreadcrumbBar"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_BreadcrumbBar.qml"
|
url:"qrc:/example/qml/page/T_BreadcrumbBar.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"TabView"
|
title:"TabView"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
image:"qrc:/example/res/image/control/TabView.png"
|
image:"qrc:/example/res/image/control/TabView.png"
|
||||||
recentlyAdded:true
|
recentlyAdded:true
|
||||||
order:1
|
order:1
|
||||||
desc:"A control that displays a collection of tabs thatcan be used to display several documents."
|
desc:"A control that displays a collection of tabs thatcan be used to display several documents."
|
||||||
url:"qrc:/example/qml/page/T_TabView.qml"
|
url:"qrc:/example/qml/page/T_TabView.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"TreeView"
|
title:"TreeView"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_TreeView.qml"
|
url:"qrc:/example/qml/page/T_TreeView.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"TableView"
|
title:"TableView"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
image:"qrc:/example/res/image/control/DataGrid.png"
|
image:"qrc:/example/res/image/control/DataGrid.png"
|
||||||
recentlyAdded:true
|
recentlyAdded:true
|
||||||
order:4
|
order:4
|
||||||
desc:"The TableView control provides a flexible way to display a collection of data in rows and columns"
|
desc:"The TableView control provides a flexible way to display a collection of data in rows and columns"
|
||||||
url:"qrc:/example/qml/page/T_TableView.qml"
|
url:"qrc:/example/qml/page/T_TableView.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"Pagination"
|
title:"Pagination"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_Pagination.qml"
|
url:"qrc:/example/qml/page/T_Pagination.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"MultiWindow"
|
title:"MultiWindow"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_MultiWindow.qml"
|
url:"qrc:/example/qml/page/T_MultiWindow.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"FlipView"
|
title:"FlipView"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
image:"qrc:/example/res/image/control/FlipView.png"
|
image:"qrc:/example/res/image/control/FlipView.png"
|
||||||
recentlyAdded:true
|
recentlyAdded:true
|
||||||
order:2
|
order:2
|
||||||
desc:"Presents a collection of items that the user canflip through, one item at a time."
|
desc:"Presents a collection of items that the user canflip through, one item at a time."
|
||||||
url:"qrc:/example/qml/page/T_FlipView.qml"
|
url:"qrc:/example/qml/page/T_FlipView.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FluPaneItemExpander{
|
FluPaneItemExpander{
|
||||||
title:lang.theming
|
title:Lang.theming
|
||||||
icon:FluentIcons.Brightness
|
icon:FluentIcons.Brightness
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"Acrylic"
|
title:"Acrylic"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_Acrylic.qml"
|
url:"qrc:/example/qml/page/T_Acrylic.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"Theme"
|
title:"Theme"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_Theme.qml"
|
url:"qrc:/example/qml/page/T_Theme.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"Typography"
|
title:"Typography"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_Typography.qml"
|
url:"qrc:/example/qml/page/T_Typography.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"Awesome"
|
title:"Awesome"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_Awesome.qml"
|
url:"qrc:/example/qml/page/T_Awesome.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -373,60 +374,60 @@ FluObject{
|
|||||||
}
|
}
|
||||||
|
|
||||||
FluPaneItemExpander{
|
FluPaneItemExpander{
|
||||||
title:lang.other
|
title:Lang.other
|
||||||
icon:FluentIcons.Shop
|
icon:FluentIcons.Shop
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"QRCode"
|
title:"QRCode"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_QRCode.qml"
|
url:"qrc:/example/qml/page/T_QRCode.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"Tour"
|
title:"Tour"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_Tour.qml"
|
url:"qrc:/example/qml/page/T_Tour.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"Timeline"
|
title:"Timeline"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_Timeline.qml"
|
url:"qrc:/example/qml/page/T_Timeline.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"Screenshot"
|
title:"Screenshot(Todo)"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_Screenshot.qml"
|
url:"qrc:/example/qml/page/T_Screenshot.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"Captcha"
|
title:"Captcha"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_Captcha.qml"
|
url:"qrc:/example/qml/page/T_Captcha.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"Chart"
|
title:"Chart"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
url:"qrc:/example/qml/page/T_Chart.qml"
|
url:"qrc:/example/qml/page/T_Chart.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
title:"Http"
|
title:"Network"
|
||||||
url:"qrc:/example/qml/page/T_Http.qml"
|
menuDelegate: paneItemMenu
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
url:"qrc:/example/qml/page/T_Network.qml"
|
||||||
onTap:{ navigationView.push(url) }
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
FluPaneItem{
|
FluPaneItem{
|
||||||
id:item_other
|
id:item_other
|
||||||
title:"RemoteLoader"
|
title:"RemoteLoader"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
count: 99
|
count: 99
|
||||||
infoBadge:FluBadge{
|
infoBadge:FluBadge{
|
||||||
count: item_other.count
|
count: item_other.count
|
||||||
color: Qt.rgba(82/255,196/255,26/255,1)
|
color: Qt.rgba(82/255,196/255,26/255,1)
|
||||||
}
|
}
|
||||||
url:"qrc:/example/qml/page/T_RemoteLoader.qml"
|
url:"qrc:/example/qml/page/T_RemoteLoader.qml"
|
||||||
onDropped:{ FluApp.navigate("/pageWindow",{title:title,url:url}) }
|
|
||||||
onTap:{
|
onTap:{
|
||||||
item_other.count = 0
|
item_other.count = 0
|
||||||
navigationView.push("qrc:/example/qml/page/T_RemoteLoader.qml")
|
navigationView.push("qrc:/example/qml/page/T_RemoteLoader.qml")
|
||||||
@ -437,7 +438,12 @@ FluObject{
|
|||||||
onTapListener:function(){
|
onTapListener:function(){
|
||||||
FluApp.navigate("/hotload")
|
FluApp.navigate("/hotload")
|
||||||
}
|
}
|
||||||
onDropped:{ FluApp.navigate("/hotload") }
|
}
|
||||||
|
FluPaneItem{
|
||||||
|
title:"3D"
|
||||||
|
menuDelegate: paneItemMenu
|
||||||
|
url:"qrc:/example/qml/page/T_3D.qml"
|
||||||
|
onTap:{ navigationView.push(url) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -474,6 +480,9 @@ FluObject{
|
|||||||
}
|
}
|
||||||
|
|
||||||
function getSearchData(){
|
function getSearchData(){
|
||||||
|
if(!navigationView){
|
||||||
|
return
|
||||||
|
}
|
||||||
var arr = []
|
var arr = []
|
||||||
var items = navigationView.getItems();
|
var items = navigationView.getItems();
|
||||||
for(var i=0;i<items.length;i++){
|
for(var i=0;i<items.length;i++){
|
||||||
|
77
example/qml/global/Lang.qml
Normal file
77
example/qml/global/Lang.qml
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
pragma Singleton
|
||||||
|
|
||||||
|
import QtQuick 2.15
|
||||||
|
|
||||||
|
QtObject {
|
||||||
|
|
||||||
|
property string home
|
||||||
|
property string basic_input
|
||||||
|
property string form
|
||||||
|
property string surface
|
||||||
|
property string popus
|
||||||
|
property string navigation
|
||||||
|
property string theming
|
||||||
|
property string media
|
||||||
|
property string dark_mode
|
||||||
|
property string sys_dark_mode
|
||||||
|
property string search
|
||||||
|
property string about
|
||||||
|
property string settings
|
||||||
|
property string locale
|
||||||
|
property string navigation_view_display_mode
|
||||||
|
property string other
|
||||||
|
|
||||||
|
function zh(){
|
||||||
|
home="首页"
|
||||||
|
basic_input="基本输入"
|
||||||
|
form="表单"
|
||||||
|
surface="表面"
|
||||||
|
popus="弹窗"
|
||||||
|
navigation="导航"
|
||||||
|
theming="主题"
|
||||||
|
media="媒体"
|
||||||
|
dark_mode="夜间模式"
|
||||||
|
sys_dark_mode="跟随系统"
|
||||||
|
search="查找"
|
||||||
|
about="关于"
|
||||||
|
settings="设置"
|
||||||
|
locale="语言环境"
|
||||||
|
navigation_view_display_mode="导航视图显示模式"
|
||||||
|
other="其他"
|
||||||
|
}
|
||||||
|
|
||||||
|
function en(){
|
||||||
|
home="Home"
|
||||||
|
basic_input="Basic Input"
|
||||||
|
form="Form"
|
||||||
|
surface="Surfaces"
|
||||||
|
popus="Popus"
|
||||||
|
navigation="Navigation"
|
||||||
|
theming="Theming"
|
||||||
|
media="Media"
|
||||||
|
dark_mode="Dark Mode"
|
||||||
|
sys_dark_mode="Sync with system"
|
||||||
|
search="Search"
|
||||||
|
about="About"
|
||||||
|
settings="Settings"
|
||||||
|
locale="Locale"
|
||||||
|
navigation_view_display_mode="NavigationView Display Mode"
|
||||||
|
other="Other"
|
||||||
|
}
|
||||||
|
|
||||||
|
property string __locale
|
||||||
|
property var __localeList: ["Zh","En"]
|
||||||
|
|
||||||
|
on__LocaleChanged: {
|
||||||
|
if(__locale === "Zh"){
|
||||||
|
zh()
|
||||||
|
}else{
|
||||||
|
en()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Component.onCompleted: {
|
||||||
|
__locale = "En"
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,9 +0,0 @@
|
|||||||
pragma Singleton
|
|
||||||
|
|
||||||
import QtQuick 2.15
|
|
||||||
import QtQuick.Controls 2.15
|
|
||||||
import FluentUI 1.0
|
|
||||||
|
|
||||||
QtObject {
|
|
||||||
property int displayMode : FluNavigationViewType.Auto
|
|
||||||
}
|
|
@ -1,3 +1,3 @@
|
|||||||
singleton ItemsOriginal 1.0 ItemsOriginal.qml
|
singleton ItemsOriginal 1.0 ItemsOriginal.qml
|
||||||
singleton ItemsFooter 1.0 ItemsFooter.qml
|
singleton ItemsFooter 1.0 ItemsFooter.qml
|
||||||
singleton MainEvent 1.0 MainEvent.qml
|
singleton Lang 1.0 Lang.qml
|
||||||
|
121
example/qml/page/T_3D.qml
Normal file
121
example/qml/page/T_3D.qml
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
import QtQuick 2.15
|
||||||
|
import QtQuick.Layouts 1.15
|
||||||
|
import QtQuick.Controls 2.15
|
||||||
|
import QtQuick.Window 2.15
|
||||||
|
import Qt3D.Core 2.15
|
||||||
|
import Qt3D.Render 2.15
|
||||||
|
import Qt3D.Input 2.12
|
||||||
|
import Qt3D.Extras 2.15
|
||||||
|
import QtQuick.Scene3D 2.15
|
||||||
|
import QtQuick.Dialogs 1.3
|
||||||
|
import Qt.labs.platform 1.1
|
||||||
|
import FluentUI 1.0
|
||||||
|
import "qrc:///example/qml/component"
|
||||||
|
import "../component"
|
||||||
|
|
||||||
|
FluContentPage{
|
||||||
|
|
||||||
|
id:root
|
||||||
|
title:"3D"
|
||||||
|
|
||||||
|
Scene3D{
|
||||||
|
id:scene_3d
|
||||||
|
anchors.fill: parent
|
||||||
|
focus: true
|
||||||
|
aspects: ["input", "logic"]
|
||||||
|
cameraAspectRatioMode: Scene3D.AutomaticAspectRatio
|
||||||
|
Entity {
|
||||||
|
Camera {
|
||||||
|
id: camera
|
||||||
|
projectionType: CameraLens.PerspectiveProjection
|
||||||
|
fieldOfView: 22.5
|
||||||
|
aspectRatio: scene_3d.width / scene_3d.height
|
||||||
|
nearPlane: 1
|
||||||
|
farPlane: 1000.0
|
||||||
|
viewCenter: Qt.vector3d( 0.0, 0.0, 0.0 )
|
||||||
|
upVector: Qt.vector3d( 0.0, 1.0, 0.0 )
|
||||||
|
position: Qt.vector3d( 0.0, 0.0, 15.0 )
|
||||||
|
}
|
||||||
|
FirstPersonCameraController {
|
||||||
|
linearSpeed: 100
|
||||||
|
lookSpeed: 50
|
||||||
|
camera: camera
|
||||||
|
}
|
||||||
|
components: [
|
||||||
|
RenderSettings{
|
||||||
|
activeFrameGraph: ForwardRenderer{
|
||||||
|
clearColor: Qt.rgba(0,0,0,0);
|
||||||
|
camera: camera
|
||||||
|
}
|
||||||
|
},
|
||||||
|
InputSettings{}
|
||||||
|
]
|
||||||
|
Mesh {
|
||||||
|
id: mesh
|
||||||
|
source: "https://zhu-zichu.gitee.io/test.obj"
|
||||||
|
}
|
||||||
|
PhongMaterial {
|
||||||
|
id: material
|
||||||
|
ambient: color_picker.colorValue
|
||||||
|
}
|
||||||
|
Transform{
|
||||||
|
id:transform
|
||||||
|
scale: 1.0
|
||||||
|
translation: Qt.vector3d(0, 0, 0)
|
||||||
|
rotation: fromEulerAngles(0, 0, 0)
|
||||||
|
property real hAngle:0.0
|
||||||
|
NumberAnimation on hAngle{
|
||||||
|
from:0
|
||||||
|
to:360.0
|
||||||
|
duration: 5000
|
||||||
|
loops: Animation.Infinite
|
||||||
|
}
|
||||||
|
matrix:{
|
||||||
|
var m=Qt.matrix4x4();
|
||||||
|
m.rotate(hAngle,Qt.vector3d(0,1,0));
|
||||||
|
m.translate(Qt.vector3d(0,0,0));
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Entity {
|
||||||
|
id: entity
|
||||||
|
components: [mesh, material,transform]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ColumnLayout{
|
||||||
|
RowLayout{
|
||||||
|
spacing: 10
|
||||||
|
Layout.topMargin: 20
|
||||||
|
FluText{
|
||||||
|
text:"tintColor:"
|
||||||
|
Layout.alignment: Qt.AlignVCenter
|
||||||
|
}
|
||||||
|
FluColorPicker{
|
||||||
|
id:color_picker
|
||||||
|
enableAlphaChannel:false
|
||||||
|
Component.onCompleted: {
|
||||||
|
setColor("gray")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FluButton{
|
||||||
|
text:"选择obj资源"
|
||||||
|
onClicked: {
|
||||||
|
file_dialog.open()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FileDialog {
|
||||||
|
id: file_dialog
|
||||||
|
nameFilters: ["Obj files (*.obj)"]
|
||||||
|
folder: StandardPaths.writableLocation(StandardPaths.DocumentsLocation)
|
||||||
|
onAccepted: {
|
||||||
|
var fileUrl = file_dialog.currentFile
|
||||||
|
mesh.source = fileUrl
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -48,10 +48,10 @@ FluScrollablePage{
|
|||||||
height: 1200/4+20
|
height: 1200/4+20
|
||||||
paddings: 10
|
paddings: 10
|
||||||
Layout.topMargin: 10
|
Layout.topMargin: 10
|
||||||
FluRectangle{
|
FluClip{
|
||||||
width: 1920/4
|
width: 1920/4
|
||||||
height: 1200/4
|
height: 1200/4
|
||||||
radius:[15,15,15,15]
|
radius:[8,8,8,8]
|
||||||
Image {
|
Image {
|
||||||
id:image
|
id:image
|
||||||
asynchronous: true
|
asynchronous: true
|
||||||
|
@ -25,7 +25,7 @@ FluContentPage {
|
|||||||
leftMargin: 14
|
leftMargin: 14
|
||||||
}
|
}
|
||||||
onClicked: {
|
onClicked: {
|
||||||
grid_view.model = FluApp.awesomelist(text_box.text)
|
grid_view.model = FluTheme.awesomeList(text_box.text)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
GridView{
|
GridView{
|
||||||
@ -34,7 +34,7 @@ FluContentPage {
|
|||||||
cellHeight: 80
|
cellHeight: 80
|
||||||
clip: true
|
clip: true
|
||||||
boundsBehavior: GridView.StopAtBounds
|
boundsBehavior: GridView.StopAtBounds
|
||||||
model:FluApp.awesomelist()
|
model:FluTheme.awesomeList()
|
||||||
ScrollBar.vertical: FluScrollBar {}
|
ScrollBar.vertical: FluScrollBar {}
|
||||||
anchors{
|
anchors{
|
||||||
topMargin: 10
|
topMargin: 10
|
||||||
|
@ -161,6 +161,97 @@ FluScrollablePage{
|
|||||||
}'
|
}'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Timer{
|
||||||
|
id:timer_progress
|
||||||
|
interval: 200
|
||||||
|
onTriggered: {
|
||||||
|
btn_progress.progress = (btn_progress.progress + 0.1).toFixed(1)
|
||||||
|
if(btn_progress.progress==1){
|
||||||
|
timer_progress.stop()
|
||||||
|
}else{
|
||||||
|
timer_progress.start()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FluArea{
|
||||||
|
Layout.fillWidth: true
|
||||||
|
height: 68
|
||||||
|
Layout.topMargin: 20
|
||||||
|
paddings: 10
|
||||||
|
|
||||||
|
FluProgressButton{
|
||||||
|
id:btn_progress
|
||||||
|
disabled:progress_button_switch.checked
|
||||||
|
text:"Progress Button"
|
||||||
|
anchors{
|
||||||
|
verticalCenter: parent.verticalCenter
|
||||||
|
left: parent.left
|
||||||
|
}
|
||||||
|
onClicked: {
|
||||||
|
btn_progress.progress = 0
|
||||||
|
timer_progress.restart()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluToggleSwitch{
|
||||||
|
id:progress_button_switch
|
||||||
|
anchors{
|
||||||
|
right: parent.right
|
||||||
|
verticalCenter: parent.verticalCenter
|
||||||
|
}
|
||||||
|
text:"Disabled"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
CodeExpander{
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.topMargin: -1
|
||||||
|
code:'FluProgressButton{
|
||||||
|
text:"Progress Button"
|
||||||
|
onClicked: {
|
||||||
|
|
||||||
|
}
|
||||||
|
}'
|
||||||
|
}
|
||||||
|
|
||||||
|
FluArea{
|
||||||
|
Layout.fillWidth: true
|
||||||
|
height: 68
|
||||||
|
Layout.topMargin: 20
|
||||||
|
paddings: 10
|
||||||
|
|
||||||
|
FluLoadingButton{
|
||||||
|
id:btn_loading
|
||||||
|
loading:loading_button_switch.checked
|
||||||
|
text:"Loading Button"
|
||||||
|
anchors{
|
||||||
|
verticalCenter: parent.verticalCenter
|
||||||
|
left: parent.left
|
||||||
|
}
|
||||||
|
onClicked: {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluToggleSwitch{
|
||||||
|
id:loading_button_switch
|
||||||
|
checked: true
|
||||||
|
anchors{
|
||||||
|
right: parent.right
|
||||||
|
verticalCenter: parent.verticalCenter
|
||||||
|
}
|
||||||
|
text:"Loading"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
CodeExpander{
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.topMargin: -1
|
||||||
|
code:'FluLoadingButton{
|
||||||
|
text:"Loading Button"
|
||||||
|
onClicked: {
|
||||||
|
|
||||||
|
}
|
||||||
|
}'
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
FluArea{
|
FluArea{
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
|
@ -37,7 +37,7 @@ FluScrollablePage{
|
|||||||
left: parent.left
|
left: parent.left
|
||||||
}
|
}
|
||||||
FluCalendarPicker{
|
FluCalendarPicker{
|
||||||
current:Date.fromLocaleString("2013年7月11日 21:17:42")
|
current:new Date()
|
||||||
onAccepted:{
|
onAccepted:{
|
||||||
showSuccess(current.toLocaleString())
|
showSuccess(current.toLocaleString())
|
||||||
}
|
}
|
||||||
|
@ -10,10 +10,10 @@ FluScrollablePage{
|
|||||||
|
|
||||||
title:"Captcha"
|
title:"Captcha"
|
||||||
|
|
||||||
|
|
||||||
FluCaptcha{
|
FluCaptcha{
|
||||||
id:captcha
|
id:captcha
|
||||||
Layout.topMargin: 20
|
Layout.topMargin: 20
|
||||||
|
ignoreCase:switch_case.checked
|
||||||
MouseArea{
|
MouseArea{
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
cursorShape: Qt.PointingHandCursor
|
cursorShape: Qt.PointingHandCursor
|
||||||
@ -31,12 +31,20 @@ FluScrollablePage{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FluToggleSwitch{
|
||||||
|
id:switch_case
|
||||||
|
text:"Ignore Case"
|
||||||
|
checked: true
|
||||||
|
Layout.topMargin: 10
|
||||||
|
}
|
||||||
|
|
||||||
RowLayout{
|
RowLayout{
|
||||||
spacing: 10
|
spacing: 10
|
||||||
Layout.topMargin: 10
|
Layout.topMargin: 10
|
||||||
FluTextBox{
|
FluTextBox{
|
||||||
id:text_box
|
id:text_box
|
||||||
placeholderText: "请输入验证码"
|
placeholderText: "请输入验证码"
|
||||||
|
Layout.preferredWidth: 240
|
||||||
}
|
}
|
||||||
FluButton{
|
FluButton{
|
||||||
text:"verify"
|
text:"verify"
|
||||||
@ -50,6 +58,4 @@ FluScrollablePage{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -37,20 +37,27 @@ FluScrollablePage{
|
|||||||
FluText{
|
FluText{
|
||||||
text:"轮播图,支持无限轮播,无限滑动,用ListView实现的组件"
|
text:"轮播图,支持无限轮播,无限滑动,用ListView实现的组件"
|
||||||
}
|
}
|
||||||
FluCarousel{
|
Item{
|
||||||
radius:[5,5,5,5]
|
width: 400
|
||||||
delegate: Component{
|
height: 300
|
||||||
Image {
|
FluShadow{
|
||||||
anchors.fill: parent
|
radius: 8
|
||||||
source: model.url
|
|
||||||
asynchronous: true
|
|
||||||
fillMode:Image.PreserveAspectCrop
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
Layout.topMargin: 20
|
FluCarousel{
|
||||||
Layout.leftMargin: 5
|
anchors.fill: parent
|
||||||
Component.onCompleted: {
|
delegate: Component{
|
||||||
model = [{url:"qrc:/example/res/image/banner_1.jpg"},{url:"qrc:/example/res/image/banner_2.jpg"},{url:"qrc:/example/res/image/banner_3.jpg"}]
|
Image {
|
||||||
|
anchors.fill: parent
|
||||||
|
source: model.url
|
||||||
|
asynchronous: true
|
||||||
|
fillMode:Image.PreserveAspectCrop
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Layout.topMargin: 20
|
||||||
|
Layout.leftMargin: 5
|
||||||
|
Component.onCompleted: {
|
||||||
|
model = [{url:"qrc:/example/res/image/banner_1.jpg"},{url:"qrc:/example/res/image/banner_2.jpg"},{url:"qrc:/example/res/image/banner_3.jpg"}]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -67,46 +74,54 @@ FluScrollablePage{
|
|||||||
verticalCenter: parent.verticalCenter
|
verticalCenter: parent.verticalCenter
|
||||||
left:parent.left
|
left:parent.left
|
||||||
}
|
}
|
||||||
FluCarousel{
|
Item{
|
||||||
radius:[15,15,15,15]
|
width: 400
|
||||||
loopTime:1500
|
height: 300
|
||||||
indicatorGravity: Qt.AlignHCenter | Qt.AlignTop
|
FluShadow{
|
||||||
indicatorMarginTop:15
|
radius: 8
|
||||||
delegate: Component{
|
}
|
||||||
Item{
|
FluCarousel{
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
Image {
|
loopTime:1500
|
||||||
|
indicatorGravity: Qt.AlignHCenter | Qt.AlignTop
|
||||||
|
indicatorMarginTop:15
|
||||||
|
delegate: Component{
|
||||||
|
Item{
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
source: model.url
|
Image {
|
||||||
asynchronous: true
|
|
||||||
fillMode:Image.PreserveAspectCrop
|
|
||||||
}
|
|
||||||
Rectangle{
|
|
||||||
height: 40
|
|
||||||
width: parent.width
|
|
||||||
anchors.bottom: parent.bottom
|
|
||||||
color: "#33000000"
|
|
||||||
FluText{
|
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
verticalAlignment: Qt.AlignVCenter
|
source: model.url
|
||||||
horizontalAlignment: Qt.AlignHCenter
|
asynchronous: true
|
||||||
text:model.title
|
fillMode:Image.PreserveAspectCrop
|
||||||
color: FluColors.Grey10
|
}
|
||||||
font.pixelSize: 15
|
Rectangle{
|
||||||
|
height: 40
|
||||||
|
width: parent.width
|
||||||
|
anchors.bottom: parent.bottom
|
||||||
|
color: "#33000000"
|
||||||
|
FluText{
|
||||||
|
anchors.fill: parent
|
||||||
|
verticalAlignment: Qt.AlignVCenter
|
||||||
|
horizontalAlignment: Qt.AlignHCenter
|
||||||
|
text:model.title
|
||||||
|
color: FluColors.Grey10
|
||||||
|
font.pixelSize: 15
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
Layout.topMargin: 20
|
||||||
Layout.topMargin: 20
|
Layout.leftMargin: 5
|
||||||
Layout.leftMargin: 5
|
Component.onCompleted: {
|
||||||
Component.onCompleted: {
|
var arr = []
|
||||||
var arr = []
|
arr.push({url:"qrc:/example/res/image/banner_1.jpg",title:"共同应对全球性问题"})
|
||||||
arr.push({url:"qrc:/example/res/image/banner_1.jpg",title:"共同应对全球性问题"})
|
arr.push({url:"qrc:/example/res/image/banner_2.jpg",title:"三小只全程没互动"})
|
||||||
arr.push({url:"qrc:/example/res/image/banner_2.jpg",title:"三小只全程没互动"})
|
arr.push({url:"qrc:/example/res/image/banner_3.jpg",title:"有效投资扩大 激发增长动能"})
|
||||||
arr.push({url:"qrc:/example/res/image/banner_3.jpg",title:"有效投资扩大 激发增长动能"})
|
model = arr
|
||||||
model = arr
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12,27 +12,35 @@ FluScrollablePage{
|
|||||||
|
|
||||||
FluArea{
|
FluArea{
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
height: 68
|
height: 72
|
||||||
paddings: 10
|
paddings: 10
|
||||||
Layout.topMargin: 20
|
Layout.topMargin: 20
|
||||||
|
|
||||||
|
FluText{
|
||||||
|
text:"A 2-state CheckBox"
|
||||||
|
}
|
||||||
|
|
||||||
Row{
|
Row{
|
||||||
spacing: 30
|
spacing: 30
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
anchors{
|
||||||
FluCheckBox{
|
top: parent.top
|
||||||
disabled: check_box_switch.checked
|
topMargin: 30
|
||||||
}
|
}
|
||||||
FluCheckBox{
|
FluCheckBox{
|
||||||
disabled: check_box_switch.checked
|
disabled: check_box_switch_two.checked
|
||||||
|
}
|
||||||
|
FluCheckBox{
|
||||||
|
disabled: check_box_switch_two.checked
|
||||||
text:"Right"
|
text:"Right"
|
||||||
}
|
}
|
||||||
FluCheckBox{
|
FluCheckBox{
|
||||||
disabled: check_box_switch.checked
|
disabled: check_box_switch_two.checked
|
||||||
text:"Left"
|
text:"Left"
|
||||||
textRight: false
|
textRight: false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
FluToggleSwitch{
|
FluToggleSwitch{
|
||||||
id:check_box_switch
|
id:check_box_switch_two
|
||||||
anchors{
|
anchors{
|
||||||
right: parent.right
|
right: parent.right
|
||||||
verticalCenter: parent.verticalCenter
|
verticalCenter: parent.verticalCenter
|
||||||
@ -48,4 +56,60 @@ FluScrollablePage{
|
|||||||
}'
|
}'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FluArea{
|
||||||
|
Layout.fillWidth: true
|
||||||
|
height: 72
|
||||||
|
paddings: 10
|
||||||
|
Layout.topMargin: 20
|
||||||
|
|
||||||
|
FluText{
|
||||||
|
text:"A 3-state CheckBox"
|
||||||
|
}
|
||||||
|
|
||||||
|
Row{
|
||||||
|
spacing: 30
|
||||||
|
anchors{
|
||||||
|
top: parent.top
|
||||||
|
topMargin: 30
|
||||||
|
}
|
||||||
|
FluCheckBox{
|
||||||
|
property int count: 1
|
||||||
|
text:"Three State"
|
||||||
|
disabled: check_box_switch_three.checked
|
||||||
|
clickListener: function(){
|
||||||
|
var flag = count%3
|
||||||
|
if(flag === 0){
|
||||||
|
checked = false
|
||||||
|
indeterminate = false
|
||||||
|
}
|
||||||
|
if(flag === 1){
|
||||||
|
checked = true
|
||||||
|
indeterminate = false
|
||||||
|
}
|
||||||
|
if(flag === 2){
|
||||||
|
checked = true
|
||||||
|
indeterminate = true
|
||||||
|
}
|
||||||
|
count++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluToggleSwitch{
|
||||||
|
id:check_box_switch_three
|
||||||
|
anchors{
|
||||||
|
right: parent.right
|
||||||
|
verticalCenter: parent.verticalCenter
|
||||||
|
}
|
||||||
|
text:"Disabled"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
CodeExpander{
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.topMargin: -1
|
||||||
|
code:'FluCheckBox{
|
||||||
|
text:"Text"
|
||||||
|
indeterminate:true
|
||||||
|
}'
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
108
example/qml/page/T_Clip.qml
Normal file
108
example/qml/page/T_Clip.qml
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
import QtQuick 2.15
|
||||||
|
import QtQuick.Layouts 1.15
|
||||||
|
import QtQuick.Controls 2.15
|
||||||
|
import QtQuick.Window 2.15
|
||||||
|
import FluentUI 1.0
|
||||||
|
import "../component"
|
||||||
|
import "qrc:///example/qml/component"
|
||||||
|
|
||||||
|
FluScrollablePage{
|
||||||
|
|
||||||
|
title:"Clip"
|
||||||
|
|
||||||
|
FluArea{
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.topMargin: 20
|
||||||
|
height: 380
|
||||||
|
paddings: 10
|
||||||
|
|
||||||
|
Column{
|
||||||
|
spacing: 15
|
||||||
|
anchors{
|
||||||
|
verticalCenter: parent.verticalCenter
|
||||||
|
left: parent.left
|
||||||
|
}
|
||||||
|
FluText{
|
||||||
|
text:"配合图片使用(software渲染下该组件将没有效果)"
|
||||||
|
font: FluTextStyle.Subtitle
|
||||||
|
Layout.topMargin: 20
|
||||||
|
}
|
||||||
|
RowLayout{
|
||||||
|
spacing: 14
|
||||||
|
FluClip{
|
||||||
|
width: 50
|
||||||
|
height: 50
|
||||||
|
radius:[25,0,25,25]
|
||||||
|
Image {
|
||||||
|
asynchronous: true
|
||||||
|
anchors.fill: parent
|
||||||
|
source: "qrc:/example/res/svg/avatar_1.svg"
|
||||||
|
sourceSize: Qt.size(width,height)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluClip{
|
||||||
|
width: 50
|
||||||
|
height: 50
|
||||||
|
radius:[10,10,10,10]
|
||||||
|
Image {
|
||||||
|
asynchronous: true
|
||||||
|
anchors.fill: parent
|
||||||
|
sourceSize: Qt.size(width,height)
|
||||||
|
source: "qrc:/example/res/svg/avatar_2.svg"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluClip{
|
||||||
|
width: 50
|
||||||
|
height: 50
|
||||||
|
radius:[25,25,25,25]
|
||||||
|
Image {
|
||||||
|
asynchronous: true
|
||||||
|
anchors.fill: parent
|
||||||
|
sourceSize: Qt.size(width,height)
|
||||||
|
source: "qrc:/example/res/svg/avatar_3.svg"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluClip{
|
||||||
|
width: 50
|
||||||
|
height: 50
|
||||||
|
radius:[0,25,25,25]
|
||||||
|
Image {
|
||||||
|
asynchronous: true
|
||||||
|
anchors.fill: parent
|
||||||
|
sourceSize: Qt.size(width,height)
|
||||||
|
source: "qrc:/example/res/svg/avatar_4.svg"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluClip{
|
||||||
|
width: 1920/5
|
||||||
|
height: 1200/5
|
||||||
|
radius:[8,8,8,8]
|
||||||
|
Image {
|
||||||
|
asynchronous: true
|
||||||
|
source: "qrc:/example/res/image/banner_1.jpg"
|
||||||
|
anchors.fill: parent
|
||||||
|
sourceSize: Qt.size(2*width,2*height)
|
||||||
|
}
|
||||||
|
Layout.topMargin: 20
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
CodeExpander{
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.topMargin: -1
|
||||||
|
code:'FluClip{
|
||||||
|
radius: [25,25,25,25]
|
||||||
|
width: 50
|
||||||
|
height: 50
|
||||||
|
Image{
|
||||||
|
asynchronous: true
|
||||||
|
anchors.fill: parent
|
||||||
|
source: "qrc:/example/res/svg/avatar_4.svg"
|
||||||
|
sourceSize: Qt.size(width,height)
|
||||||
|
}
|
||||||
|
}'
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -47,7 +47,6 @@ FluScrollablePage{
|
|||||||
}
|
}
|
||||||
FluComboBox {
|
FluComboBox {
|
||||||
editable: true
|
editable: true
|
||||||
font:FluTextStyle.BodyStrong
|
|
||||||
model: ListModel {
|
model: ListModel {
|
||||||
id: model_2
|
id: model_2
|
||||||
ListElement { text: "Banana" }
|
ListElement { text: "Banana" }
|
||||||
|
@ -116,4 +116,68 @@ FluScrollablePage{
|
|||||||
showSuccess("点击最小化按钮")
|
showSuccess("点击最小化按钮")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FluArea{
|
||||||
|
Layout.fillWidth: true
|
||||||
|
height: 68
|
||||||
|
paddings: 10
|
||||||
|
Layout.topMargin: 20
|
||||||
|
FluButton{
|
||||||
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
Layout.topMargin: 20
|
||||||
|
text:"Custom Content Dialog"
|
||||||
|
onClicked: {
|
||||||
|
custom_btn_dialog.open()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
CodeExpander{
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.topMargin: -1
|
||||||
|
code:'FluContentDialog{
|
||||||
|
id:dialog
|
||||||
|
title:"友情提示"
|
||||||
|
message:"数据正在加载中,请稍等..."
|
||||||
|
negativeText:"取消加载"
|
||||||
|
contentDelegate: Component{
|
||||||
|
Item{
|
||||||
|
width: parent.width
|
||||||
|
height: 80
|
||||||
|
FluProgressRing{
|
||||||
|
anchors.centerIn: parent
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
onNegativeClicked:{
|
||||||
|
showSuccess("点击取消按钮")
|
||||||
|
}
|
||||||
|
positiveText:"确定"
|
||||||
|
onPositiveClicked:{
|
||||||
|
showSuccess("点击确定按钮")
|
||||||
|
}
|
||||||
|
dialog.open()'
|
||||||
|
}
|
||||||
|
|
||||||
|
FluContentDialog{
|
||||||
|
id:custom_btn_dialog
|
||||||
|
title:"友情提示"
|
||||||
|
message:"数据正在加载中,请稍等..."
|
||||||
|
negativeText:"取消加载"
|
||||||
|
contentDelegate: Component{
|
||||||
|
Item{
|
||||||
|
width: parent.width
|
||||||
|
height: 80
|
||||||
|
FluProgressRing{
|
||||||
|
anchors.centerIn: parent
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
onNegativeClicked:{
|
||||||
|
showSuccess("点击取消按钮")
|
||||||
|
}
|
||||||
|
positiveText:"确定"
|
||||||
|
onPositiveClicked:{
|
||||||
|
showSuccess("点击确定按钮")
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -59,6 +59,7 @@ FluScrollablePage{
|
|||||||
width: parent.width
|
width: parent.width
|
||||||
height: parent.height
|
height: parent.height
|
||||||
contentWidth: width
|
contentWidth: width
|
||||||
|
boundsBehavior: Flickable.StopAtBounds
|
||||||
contentHeight: text_info.height
|
contentHeight: text_info.height
|
||||||
ScrollBar.vertical: FluScrollBar {}
|
ScrollBar.vertical: FluScrollBar {}
|
||||||
FluText{
|
FluText{
|
||||||
|
@ -29,6 +29,7 @@ FluScrollablePage{
|
|||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
asynchronous: true
|
asynchronous: true
|
||||||
verticalAlignment: Qt.AlignTop
|
verticalAlignment: Qt.AlignTop
|
||||||
|
sourceSize: Qt.size(960,640)
|
||||||
source: "qrc:/example/res/image/bg_home_header.png"
|
source: "qrc:/example/res/image/bg_home_header.png"
|
||||||
}
|
}
|
||||||
Rectangle{
|
Rectangle{
|
||||||
@ -49,33 +50,19 @@ FluScrollablePage{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ListView{
|
Component{
|
||||||
id: list
|
id:com_grallery
|
||||||
anchors{
|
Item{
|
||||||
left: parent.left
|
|
||||||
right: parent.right
|
|
||||||
bottom: parent.bottom
|
|
||||||
}
|
|
||||||
orientation: ListView.Horizontal
|
|
||||||
height: 240
|
|
||||||
model: model_header
|
|
||||||
header: Item{height: 10;width: 10}
|
|
||||||
footer: Item{height: 10;width: 10}
|
|
||||||
ScrollBar.horizontal: FluScrollBar{
|
|
||||||
id: scrollbar_header
|
|
||||||
}
|
|
||||||
clip: false
|
|
||||||
delegate:Item{
|
|
||||||
id: control
|
id: control
|
||||||
width: 220
|
width: 220
|
||||||
height: 240
|
height: 240
|
||||||
FluShadow{
|
FluShadow{
|
||||||
radius:8
|
radius:5
|
||||||
anchors.fill: item_content
|
anchors.fill: item_content
|
||||||
}
|
}
|
||||||
FluItem{
|
FluClip{
|
||||||
id:item_content
|
id:item_content
|
||||||
radius: [8,8,8,8]
|
radius: [5,5,5,5]
|
||||||
width: 200
|
width: 200
|
||||||
height: 220
|
height: 220
|
||||||
anchors.centerIn: parent
|
anchors.centerIn: parent
|
||||||
@ -89,20 +76,15 @@ FluScrollablePage{
|
|||||||
}
|
}
|
||||||
Rectangle{
|
Rectangle{
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
radius: 8
|
radius: 5
|
||||||
color:{
|
color:FluTheme.itemHoverColor
|
||||||
if(FluTheme.dark){
|
visible: item_mouse.containsMouse
|
||||||
if(item_mouse.containsMouse){
|
}
|
||||||
return Qt.rgba(1,1,1,0.03)
|
Rectangle{
|
||||||
}
|
anchors.fill: parent
|
||||||
return Qt.rgba(0,0,0,0.0)
|
radius: 5
|
||||||
}else{
|
color:Qt.rgba(0,0,0,0.0)
|
||||||
if(item_mouse.containsMouse){
|
visible: !item_mouse.containsMouse
|
||||||
return Qt.rgba(0,0,0,0.03)
|
|
||||||
}
|
|
||||||
return Qt.rgba(0,0,0,0.0)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
ColumnLayout{
|
ColumnLayout{
|
||||||
Image {
|
Image {
|
||||||
@ -154,11 +136,31 @@ FluScrollablePage{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ListView{
|
||||||
|
id: list
|
||||||
|
anchors{
|
||||||
|
left: parent.left
|
||||||
|
right: parent.right
|
||||||
|
bottom: parent.bottom
|
||||||
|
}
|
||||||
|
orientation: ListView.Horizontal
|
||||||
|
height: 240
|
||||||
|
model: model_header
|
||||||
|
header: Item{height: 10;width: 10}
|
||||||
|
footer: Item{height: 10;width: 10}
|
||||||
|
ScrollBar.horizontal: FluScrollBar{
|
||||||
|
id: scrollbar_header
|
||||||
|
}
|
||||||
|
clip: false
|
||||||
|
delegate: com_grallery
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Component{
|
Component{
|
||||||
id:com_item
|
id:com_item
|
||||||
Item{
|
Item{
|
||||||
|
property string desc: modelData.desc
|
||||||
width: 320
|
width: 320
|
||||||
height: 120
|
height: 120
|
||||||
FluArea{
|
FluArea{
|
||||||
@ -170,17 +172,10 @@ FluScrollablePage{
|
|||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
radius: 8
|
radius: 8
|
||||||
color:{
|
color:{
|
||||||
if(FluTheme.dark){
|
if(item_mouse.containsMouse){
|
||||||
if(item_mouse.containsMouse){
|
return FluTheme.itemHoverColor
|
||||||
return Qt.rgba(1,1,1,0.03)
|
|
||||||
}
|
|
||||||
return Qt.rgba(0,0,0,0)
|
|
||||||
}else{
|
|
||||||
if(item_mouse.containsMouse){
|
|
||||||
return Qt.rgba(0,0,0,0.03)
|
|
||||||
}
|
|
||||||
return Qt.rgba(0,0,0,0)
|
|
||||||
}
|
}
|
||||||
|
return FluTheme.itemNormalColor
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Image{
|
Image{
|
||||||
@ -194,7 +189,6 @@ FluScrollablePage{
|
|||||||
verticalCenter: parent.verticalCenter
|
verticalCenter: parent.verticalCenter
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FluText{
|
FluText{
|
||||||
id:item_title
|
id:item_title
|
||||||
text:modelData.title
|
text:modelData.title
|
||||||
@ -205,10 +199,9 @@ FluScrollablePage{
|
|||||||
top: item_icon.top
|
top: item_icon.top
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FluText{
|
FluText{
|
||||||
id:item_desc
|
id:item_desc
|
||||||
text:modelData.desc
|
text:desc
|
||||||
color:FluColors.Grey120
|
color:FluColors.Grey120
|
||||||
wrapMode: Text.WrapAnywhere
|
wrapMode: Text.WrapAnywhere
|
||||||
elide: Text.ElideRight
|
elide: Text.ElideRight
|
||||||
@ -227,7 +220,7 @@ FluScrollablePage{
|
|||||||
height: 12
|
height: 12
|
||||||
width: 12
|
width: 12
|
||||||
radius: 6
|
radius: 6
|
||||||
color: FluTheme.primaryColor.dark
|
color: FluTheme.primaryColor
|
||||||
anchors{
|
anchors{
|
||||||
right: parent.right
|
right: parent.right
|
||||||
top: parent.top
|
top: parent.top
|
||||||
|
@ -1,280 +0,0 @@
|
|||||||
import QtQuick 2.15
|
|
||||||
import Qt.labs.platform 1.1
|
|
||||||
import QtQuick.Layouts 1.15
|
|
||||||
import QtQuick.Window 2.15
|
|
||||||
import QtQuick.Controls 2.15
|
|
||||||
import QtQuick.Dialogs 1.3
|
|
||||||
import FluentUI 1.0
|
|
||||||
import "qrc:///example/qml/component"
|
|
||||||
import "../component"
|
|
||||||
|
|
||||||
FluContentPage{
|
|
||||||
|
|
||||||
title:"Http"
|
|
||||||
|
|
||||||
FluHttp{
|
|
||||||
id:http
|
|
||||||
}
|
|
||||||
|
|
||||||
Flickable{
|
|
||||||
id:layout_flick
|
|
||||||
width: 160
|
|
||||||
clip: true
|
|
||||||
anchors{
|
|
||||||
top: parent.top
|
|
||||||
topMargin: 20
|
|
||||||
bottom: parent.bottom
|
|
||||||
left: parent.left
|
|
||||||
}
|
|
||||||
ScrollBar.vertical: FluScrollBar {}
|
|
||||||
contentHeight:layout_column.height
|
|
||||||
Column{
|
|
||||||
spacing: 2
|
|
||||||
id:layout_column
|
|
||||||
width: parent.width
|
|
||||||
FluButton{
|
|
||||||
implicitWidth: parent.width
|
|
||||||
implicitHeight: 36
|
|
||||||
text: "Get请求"
|
|
||||||
onClicked: {
|
|
||||||
var callable = {}
|
|
||||||
callable.onStart = function(){
|
|
||||||
showLoading()
|
|
||||||
}
|
|
||||||
callable.onFinish = function(){
|
|
||||||
hideLoading()
|
|
||||||
}
|
|
||||||
callable.onSuccess = function(result){
|
|
||||||
text_info.text = result
|
|
||||||
console.debug(result)
|
|
||||||
}
|
|
||||||
callable.onError = function(status,errorString){
|
|
||||||
console.debug(status+";"+errorString)
|
|
||||||
}
|
|
||||||
http.get("https://httpbingo.org/get",callable)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
FluButton{
|
|
||||||
implicitWidth: parent.width
|
|
||||||
implicitHeight: 36
|
|
||||||
text: "Post表单请求"
|
|
||||||
onClicked: {
|
|
||||||
var callable = {}
|
|
||||||
callable.onStart = function(){
|
|
||||||
showLoading()
|
|
||||||
}
|
|
||||||
callable.onFinish = function(){
|
|
||||||
hideLoading()
|
|
||||||
}
|
|
||||||
callable.onSuccess = function(result){
|
|
||||||
text_info.text = result
|
|
||||||
console.debug(result)
|
|
||||||
}
|
|
||||||
callable.onError = function(status,errorString){
|
|
||||||
console.debug(status+";"+errorString)
|
|
||||||
}
|
|
||||||
var param = {}
|
|
||||||
param.custname = "朱子楚"
|
|
||||||
param.custtel = "1234567890"
|
|
||||||
param.custemail = "zhuzichu520@gmail.com"
|
|
||||||
http.post("https://httpbingo.org/post",callable,param)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
FluButton{
|
|
||||||
implicitWidth: parent.width
|
|
||||||
implicitHeight: 36
|
|
||||||
text: "Post Json请求"
|
|
||||||
onClicked: {
|
|
||||||
var callable = {}
|
|
||||||
callable.onStart = function(){
|
|
||||||
showLoading()
|
|
||||||
}
|
|
||||||
callable.onFinish = function(){
|
|
||||||
hideLoading()
|
|
||||||
}
|
|
||||||
callable.onSuccess = function(result){
|
|
||||||
text_info.text = result
|
|
||||||
console.debug(result)
|
|
||||||
}
|
|
||||||
callable.onError = function(status,errorString){
|
|
||||||
console.debug(status+";"+errorString)
|
|
||||||
}
|
|
||||||
var param = {}
|
|
||||||
param.custname = "朱子楚"
|
|
||||||
param.custtel = "1234567890"
|
|
||||||
param.custemail = "zhuzichu520@gmail.com"
|
|
||||||
http.postJson("https://httpbingo.org/post",callable,param)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
FluButton{
|
|
||||||
implicitWidth: parent.width
|
|
||||||
implicitHeight: 36
|
|
||||||
text: "Post String请求"
|
|
||||||
onClicked: {
|
|
||||||
var callable = {}
|
|
||||||
callable.onStart = function(){
|
|
||||||
showLoading()
|
|
||||||
}
|
|
||||||
callable.onFinish = function(){
|
|
||||||
hideLoading()
|
|
||||||
}
|
|
||||||
callable.onSuccess = function(result){
|
|
||||||
text_info.text = result
|
|
||||||
console.debug(result)
|
|
||||||
}
|
|
||||||
callable.onError = function(status,errorString){
|
|
||||||
console.debug(status+";"+errorString)
|
|
||||||
}
|
|
||||||
var param = "我命由我不由天"
|
|
||||||
http.postString("https://httpbingo.org/post",callable,param)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
FluButton{
|
|
||||||
id:btn_download
|
|
||||||
implicitWidth: parent.width
|
|
||||||
implicitHeight: 36
|
|
||||||
text: "下载文件"
|
|
||||||
onClicked: {
|
|
||||||
folder_dialog.open()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
FluButton{
|
|
||||||
id:btn_upload
|
|
||||||
implicitWidth: parent.width
|
|
||||||
implicitHeight: 36
|
|
||||||
text: "文件上传"
|
|
||||||
onClicked: {
|
|
||||||
file_dialog.open()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
FileDialog {
|
|
||||||
id: file_dialog
|
|
||||||
onAccepted: {
|
|
||||||
var param = {}
|
|
||||||
for(var i=0;i<selectedFiles.length;i++){
|
|
||||||
var fileUrl = selectedFiles[i]
|
|
||||||
var fileName = FluTools.getFileNameByUrl(fileUrl)
|
|
||||||
var filePath = FluTools.toLocalPath(fileUrl)
|
|
||||||
param[fileName] = filePath
|
|
||||||
}
|
|
||||||
console.debug(JSON.stringify(param))
|
|
||||||
var callable = {}
|
|
||||||
callable.onStart = function(){
|
|
||||||
btn_upload.disabled = true
|
|
||||||
}
|
|
||||||
callable.onFinish = function(){
|
|
||||||
btn_upload.disabled = false
|
|
||||||
btn_upload.text = "上传文件"
|
|
||||||
layout_upload_file_size.visible = false
|
|
||||||
text_upload_file_size.text = ""
|
|
||||||
}
|
|
||||||
callable.onSuccess = function(result){
|
|
||||||
text_info.text = result
|
|
||||||
console.debug(result)
|
|
||||||
}
|
|
||||||
callable.onError = function(status,errorString,result){
|
|
||||||
text_info.text = result
|
|
||||||
console.debug(result)
|
|
||||||
}
|
|
||||||
callable.onUploadProgress = function(sent,total){
|
|
||||||
var locale = Qt.locale()
|
|
||||||
var precent = (sent/total * 100).toFixed(0) + "%"
|
|
||||||
btn_upload.text = "上传中..."+precent
|
|
||||||
text_upload_file_size.text = "%1/%2".arg(locale.formattedDataSize(sent)).arg(locale.formattedDataSize(total))
|
|
||||||
layout_upload_file_size.visible = true
|
|
||||||
}
|
|
||||||
http.upload("https://httpbingo.org/post",callable,param)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
FolderDialog {
|
|
||||||
id: folder_dialog
|
|
||||||
currentFolder: StandardPaths.standardLocations(StandardPaths.DownloadLocation)[0]
|
|
||||||
onAccepted: {
|
|
||||||
var callable = {}
|
|
||||||
callable.onStart = function(){
|
|
||||||
btn_download.disabled = true
|
|
||||||
}
|
|
||||||
callable.onFinish = function(){
|
|
||||||
btn_download.disabled = false
|
|
||||||
btn_download.text = "下载文件"
|
|
||||||
layout_download_file_size.visible = false
|
|
||||||
text_download_file_size.text = ""
|
|
||||||
}
|
|
||||||
callable.onSuccess = function(result){
|
|
||||||
showSuccess(result)
|
|
||||||
}
|
|
||||||
callable.onError = function(status,errorString){
|
|
||||||
showError(errorString)
|
|
||||||
}
|
|
||||||
callable.onDownloadProgress = function(recv,total){
|
|
||||||
var locale = Qt.locale()
|
|
||||||
var precent = (recv/total * 100).toFixed(0) + "%"
|
|
||||||
btn_download.text = "下载中..."+precent
|
|
||||||
text_download_file_size.text = "%1/%2".arg(locale.formattedDataSize(recv)).arg(locale.formattedDataSize(total))
|
|
||||||
layout_download_file_size.visible = true
|
|
||||||
}
|
|
||||||
var path = FluTools.toLocalPath(currentFolder)+ "/big_buck_bunny.mp4"
|
|
||||||
http.download("http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4",callable,path)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
FluArea{
|
|
||||||
anchors{
|
|
||||||
top: layout_flick.top
|
|
||||||
bottom: layout_flick.bottom
|
|
||||||
left: layout_flick.right
|
|
||||||
right: parent.right
|
|
||||||
leftMargin: 8
|
|
||||||
}
|
|
||||||
Flickable{
|
|
||||||
clip: true
|
|
||||||
id:scrollview
|
|
||||||
boundsBehavior:Flickable.StopAtBounds
|
|
||||||
width: parent.width
|
|
||||||
height: parent.height
|
|
||||||
contentWidth: width
|
|
||||||
contentHeight: text_info.height
|
|
||||||
ScrollBar.vertical: FluScrollBar {}
|
|
||||||
FluText{
|
|
||||||
id:text_info
|
|
||||||
width: scrollview.width
|
|
||||||
wrapMode: Text.WrapAnywhere
|
|
||||||
padding: 14
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
FluRectangle{
|
|
||||||
id:layout_download_file_size
|
|
||||||
radius: [4,4,4,4]
|
|
||||||
height: 36
|
|
||||||
width: 160
|
|
||||||
visible: false
|
|
||||||
x:layout_flick.width
|
|
||||||
y: 173 - layout_flick.contentY
|
|
||||||
FluText{
|
|
||||||
id:text_download_file_size
|
|
||||||
anchors.centerIn: parent
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
FluRectangle{
|
|
||||||
id:layout_upload_file_size
|
|
||||||
radius: [4,4,4,4]
|
|
||||||
height: 36
|
|
||||||
width: 160
|
|
||||||
visible: false
|
|
||||||
x:layout_flick.width
|
|
||||||
y: 210 - layout_flick.contentY
|
|
||||||
FluText{
|
|
||||||
id:text_upload_file_size
|
|
||||||
anchors.centerIn: parent
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -13,7 +13,7 @@ FluScrollablePage{
|
|||||||
FluArea{
|
FluArea{
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.topMargin: 20
|
Layout.topMargin: 20
|
||||||
height: 240
|
height: 270
|
||||||
paddings: 10
|
paddings: 10
|
||||||
ColumnLayout{
|
ColumnLayout{
|
||||||
spacing: 14
|
spacing: 14
|
||||||
@ -45,6 +45,12 @@ FluScrollablePage{
|
|||||||
showSuccess("这是一个Success样式的InfoBar这是一个Success样式的InfoBar")
|
showSuccess("这是一个Success样式的InfoBar这是一个Success样式的InfoBar")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
FluButton{
|
||||||
|
text:"手动关闭的InfoBar"
|
||||||
|
onClicked: {
|
||||||
|
showInfo("这是一个Info样式的InfoBar",0,"支持手动关闭")
|
||||||
|
}
|
||||||
|
}
|
||||||
FluButton{
|
FluButton{
|
||||||
text:"Loading"
|
text:"Loading"
|
||||||
onClicked: {
|
onClicked: {
|
||||||
|
532
example/qml/page/T_Network.qml
Normal file
532
example/qml/page/T_Network.qml
Normal file
@ -0,0 +1,532 @@
|
|||||||
|
import QtQuick 2.15
|
||||||
|
import QtQuick.Layouts 1.15
|
||||||
|
import QtQuick.Window 2.15
|
||||||
|
import QtQuick.Controls 2.15
|
||||||
|
import FluentUI 1.0
|
||||||
|
import Qt.labs.platform 1.0
|
||||||
|
import "qrc:///example/qml/component"
|
||||||
|
import "../component"
|
||||||
|
|
||||||
|
FluContentPage{
|
||||||
|
|
||||||
|
id:root
|
||||||
|
title:"Network"
|
||||||
|
|
||||||
|
FluNetworkCallable{
|
||||||
|
id:callable
|
||||||
|
onStart: {
|
||||||
|
showLoading()
|
||||||
|
}
|
||||||
|
onFinish: {
|
||||||
|
hideLoading()
|
||||||
|
}
|
||||||
|
onError:
|
||||||
|
(status,errorString,result)=>{
|
||||||
|
console.debug(status+";"+errorString+";"+result)
|
||||||
|
}
|
||||||
|
onCache:
|
||||||
|
(result)=>{
|
||||||
|
text_info.text = result
|
||||||
|
}
|
||||||
|
onSuccess:
|
||||||
|
(result)=>{
|
||||||
|
text_info.text = result
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Flickable{
|
||||||
|
id:layout_flick
|
||||||
|
width: 200
|
||||||
|
clip: true
|
||||||
|
anchors{
|
||||||
|
top: parent.top
|
||||||
|
topMargin: 20
|
||||||
|
bottom: parent.bottom
|
||||||
|
left: parent.left
|
||||||
|
}
|
||||||
|
boundsBehavior: Flickable.StopAtBounds
|
||||||
|
ScrollBar.vertical: FluScrollBar {}
|
||||||
|
contentHeight:layout_column.height
|
||||||
|
Column{
|
||||||
|
spacing: 2
|
||||||
|
id:layout_column
|
||||||
|
width: parent.width
|
||||||
|
FluButton{
|
||||||
|
implicitWidth: parent.width
|
||||||
|
implicitHeight: 36
|
||||||
|
text: "Get"
|
||||||
|
onClicked: {
|
||||||
|
text_info.text = ""
|
||||||
|
FluNetwork.get("https://httpbingo.org/get")
|
||||||
|
.addQuery("name","孙悟空")
|
||||||
|
.addQuery("age",500)
|
||||||
|
.addQuery("address","花果山水帘洞")
|
||||||
|
.bind(root)
|
||||||
|
.go(callable)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluButton{
|
||||||
|
implicitWidth: parent.width
|
||||||
|
implicitHeight: 36
|
||||||
|
text: "Post Body"
|
||||||
|
onClicked: {
|
||||||
|
text_info.text = ""
|
||||||
|
FluNetwork.postBody("https://httpbingo.org/post")
|
||||||
|
.setBody("花果山水帘洞美猴王齐天大圣孙悟空")
|
||||||
|
.bind(root)
|
||||||
|
.go(callable)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluButton{
|
||||||
|
implicitWidth: parent.width
|
||||||
|
implicitHeight: 36
|
||||||
|
text: "Post Form"
|
||||||
|
onClicked: {
|
||||||
|
text_info.text = ""
|
||||||
|
FluNetwork.postForm("https://httpbingo.org/post")
|
||||||
|
.add("name","孙悟空")
|
||||||
|
.add("age",500)
|
||||||
|
.add("address","花果山水帘洞")
|
||||||
|
.bind(root)
|
||||||
|
.go(callable)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluButton{
|
||||||
|
implicitWidth: parent.width
|
||||||
|
implicitHeight: 36
|
||||||
|
text: "Post JSON"
|
||||||
|
onClicked: {
|
||||||
|
text_info.text = ""
|
||||||
|
FluNetwork.postJson("https://httpbingo.org/post")
|
||||||
|
.add("name","孙悟空")
|
||||||
|
.add("age",500)
|
||||||
|
.add("address","花果山水帘洞")
|
||||||
|
.bind(root)
|
||||||
|
.go(callable)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluButton{
|
||||||
|
implicitWidth: parent.width
|
||||||
|
implicitHeight: 36
|
||||||
|
text: "Post JSON Array"
|
||||||
|
onClicked: {
|
||||||
|
text_info.text = ""
|
||||||
|
FluNetwork.postJsonArray("https://httpbingo.org/post")
|
||||||
|
.add("name","孙悟空")
|
||||||
|
.add("age",500)
|
||||||
|
.add("address","花果山水帘洞")
|
||||||
|
.bind(root)
|
||||||
|
.go(callable)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluButton{
|
||||||
|
implicitWidth: parent.width
|
||||||
|
implicitHeight: 36
|
||||||
|
text: "Put Body"
|
||||||
|
onClicked: {
|
||||||
|
text_info.text = ""
|
||||||
|
FluNetwork.putBody("https://httpbingo.org/put")
|
||||||
|
.setBody("花果山水帘洞美猴王齐天大圣孙悟空")
|
||||||
|
.bind(root)
|
||||||
|
.go(callable)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluButton{
|
||||||
|
implicitWidth: parent.width
|
||||||
|
implicitHeight: 36
|
||||||
|
text: "Put Form"
|
||||||
|
onClicked: {
|
||||||
|
text_info.text = ""
|
||||||
|
FluNetwork.putForm("https://httpbingo.org/put")
|
||||||
|
.add("name","孙悟空")
|
||||||
|
.add("age",500)
|
||||||
|
.add("address","花果山水帘洞")
|
||||||
|
.bind(root)
|
||||||
|
.go(callable)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluButton{
|
||||||
|
implicitWidth: parent.width
|
||||||
|
implicitHeight: 36
|
||||||
|
text: "Put JSON"
|
||||||
|
onClicked: {
|
||||||
|
text_info.text = ""
|
||||||
|
FluNetwork.putJson("https://httpbingo.org/put")
|
||||||
|
.add("name","孙悟空")
|
||||||
|
.add("age",500)
|
||||||
|
.add("address","花果山水帘洞")
|
||||||
|
.bind(root)
|
||||||
|
.go(callable)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluButton{
|
||||||
|
implicitWidth: parent.width
|
||||||
|
implicitHeight: 36
|
||||||
|
text: "Put JSON Array"
|
||||||
|
onClicked: {
|
||||||
|
text_info.text = ""
|
||||||
|
FluNetwork.putJsonArray("https://httpbingo.org/put")
|
||||||
|
.add("name","孙悟空")
|
||||||
|
.add("age",500)
|
||||||
|
.add("address","花果山水帘洞")
|
||||||
|
.bind(root)
|
||||||
|
.go(callable)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluButton{
|
||||||
|
implicitWidth: parent.width
|
||||||
|
implicitHeight: 36
|
||||||
|
text: "Patch Body"
|
||||||
|
onClicked: {
|
||||||
|
text_info.text = ""
|
||||||
|
FluNetwork.patchBody("https://httpbingo.org/patch")
|
||||||
|
.setBody("花果山水帘洞美猴王齐天大圣孙悟空")
|
||||||
|
.bind(root)
|
||||||
|
.go(callable)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluButton{
|
||||||
|
implicitWidth: parent.width
|
||||||
|
implicitHeight: 36
|
||||||
|
text: "Patch Form"
|
||||||
|
onClicked: {
|
||||||
|
text_info.text = ""
|
||||||
|
FluNetwork.patchForm("https://httpbingo.org/patch")
|
||||||
|
.add("name","孙悟空")
|
||||||
|
.add("age",500)
|
||||||
|
.add("address","花果山水帘洞")
|
||||||
|
.bind(root)
|
||||||
|
.go(callable)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluButton{
|
||||||
|
implicitWidth: parent.width
|
||||||
|
implicitHeight: 36
|
||||||
|
text: "Patch JSON"
|
||||||
|
onClicked: {
|
||||||
|
text_info.text = ""
|
||||||
|
FluNetwork.patchJson("https://httpbingo.org/patch")
|
||||||
|
.add("name","孙悟空")
|
||||||
|
.add("age",500)
|
||||||
|
.add("address","花果山水帘洞")
|
||||||
|
.bind(root)
|
||||||
|
.go(callable)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluButton{
|
||||||
|
implicitWidth: parent.width
|
||||||
|
implicitHeight: 36
|
||||||
|
text: "Patch JSON Array"
|
||||||
|
onClicked: {
|
||||||
|
text_info.text = ""
|
||||||
|
FluNetwork.patchJsonArray("https://httpbingo.org/patch")
|
||||||
|
.add("name","孙悟空")
|
||||||
|
.add("age",500)
|
||||||
|
.add("address","花果山水帘洞")
|
||||||
|
.bind(root)
|
||||||
|
.go(callable)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluButton{
|
||||||
|
implicitWidth: parent.width
|
||||||
|
implicitHeight: 36
|
||||||
|
text: "Delete Body"
|
||||||
|
onClicked: {
|
||||||
|
text_info.text = ""
|
||||||
|
FluNetwork.deleteBody("https://httpbingo.org/delete")
|
||||||
|
.setBody("花果山水帘洞美猴王齐天大圣孙悟空")
|
||||||
|
.bind(root)
|
||||||
|
.go(callable)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluButton{
|
||||||
|
implicitWidth: parent.width
|
||||||
|
implicitHeight: 36
|
||||||
|
text: "Delete Form"
|
||||||
|
onClicked: {
|
||||||
|
text_info.text = ""
|
||||||
|
FluNetwork.deleteForm("https://httpbingo.org/delete")
|
||||||
|
.add("name","孙悟空")
|
||||||
|
.add("age",500)
|
||||||
|
.add("address","花果山水帘洞")
|
||||||
|
.bind(root)
|
||||||
|
.go(callable)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluButton{
|
||||||
|
implicitWidth: parent.width
|
||||||
|
implicitHeight: 36
|
||||||
|
text: "Delete JSON"
|
||||||
|
onClicked: {
|
||||||
|
text_info.text = ""
|
||||||
|
FluNetwork.deleteJson("https://httpbingo.org/delete")
|
||||||
|
.add("name","孙悟空")
|
||||||
|
.add("age",500)
|
||||||
|
.add("address","花果山水帘洞")
|
||||||
|
.bind(root)
|
||||||
|
.go(callable)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluButton{
|
||||||
|
implicitWidth: parent.width
|
||||||
|
implicitHeight: 36
|
||||||
|
text: "Delete JSON Array"
|
||||||
|
onClicked: {
|
||||||
|
text_info.text = ""
|
||||||
|
FluNetwork.deleteJsonArray("https://httpbingo.org/delete")
|
||||||
|
.add("name","孙悟空")
|
||||||
|
.add("age",500)
|
||||||
|
.add("address","花果山水帘洞")
|
||||||
|
.bind(root)
|
||||||
|
.go(callable)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluButton{
|
||||||
|
implicitWidth: parent.width
|
||||||
|
implicitHeight: 36
|
||||||
|
text: "Custom Header"
|
||||||
|
onClicked: {
|
||||||
|
text_info.text = ""
|
||||||
|
FluNetwork.postJson("https://httpbingo.org/post")
|
||||||
|
.addHeader("os","PC")
|
||||||
|
.addHeader("version","1.0.0")
|
||||||
|
.add("name","孙悟空")
|
||||||
|
.add("age",500)
|
||||||
|
.add("address","花果山水帘洞")
|
||||||
|
.bind(root)
|
||||||
|
.go(callable)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluButton{
|
||||||
|
implicitWidth: parent.width
|
||||||
|
implicitHeight: 36
|
||||||
|
text: "RequestFailedReadCache"
|
||||||
|
onClicked: {
|
||||||
|
text_info.text = ""
|
||||||
|
FluNetwork.postJson("https://httpbingo.org/post")
|
||||||
|
.setCacheMode(FluNetworkType.RequestFailedReadCache)
|
||||||
|
.add("name","孙悟空")
|
||||||
|
.add("age",500)
|
||||||
|
.add("address","花果山水帘洞")
|
||||||
|
.add("cacheMode","RequestFailedReadCache")
|
||||||
|
.bind(root)
|
||||||
|
.go(callable)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluButton{
|
||||||
|
implicitWidth: parent.width
|
||||||
|
implicitHeight: 36
|
||||||
|
text: "IfNoneCacheRequest"
|
||||||
|
onClicked: {
|
||||||
|
text_info.text = ""
|
||||||
|
FluNetwork.postJson("https://httpbingo.org/post")
|
||||||
|
.setCacheMode(FluNetworkType.IfNoneCacheRequest)
|
||||||
|
.add("name","孙悟空")
|
||||||
|
.add("age",500)
|
||||||
|
.add("address","花果山水帘洞")
|
||||||
|
.add("cacheMode","IfNoneCacheRequest")
|
||||||
|
.bind(root)
|
||||||
|
.go(callable)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluButton{
|
||||||
|
implicitWidth: parent.width
|
||||||
|
implicitHeight: 36
|
||||||
|
text: "FirstCacheThenRequest"
|
||||||
|
onClicked: {
|
||||||
|
text_info.text = ""
|
||||||
|
FluNetwork.postJson("https://httpbingo.org/post")
|
||||||
|
.setCacheMode(FluNetworkType.FirstCacheThenRequest)
|
||||||
|
.add("name","孙悟空")
|
||||||
|
.add("age",500)
|
||||||
|
.add("address","花果山水帘洞")
|
||||||
|
.add("cacheMode","FirstCacheThenRequest")
|
||||||
|
.bind(root)
|
||||||
|
.go(callable)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluButton{
|
||||||
|
implicitWidth: parent.width
|
||||||
|
implicitHeight: 36
|
||||||
|
text: "Timeout And Retry"
|
||||||
|
onClicked: {
|
||||||
|
text_info.text = ""
|
||||||
|
FluNetwork.postJson("https://httpbingo.org/post")
|
||||||
|
.setTimeout(5000)
|
||||||
|
.setRetry(3)
|
||||||
|
.add("name","孙悟空")
|
||||||
|
.add("age",500)
|
||||||
|
.add("address","花果山水帘洞")
|
||||||
|
.add("timeout","5000")
|
||||||
|
.add("retry","3")
|
||||||
|
.bind(root)
|
||||||
|
.go(callable)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluProgressButton{
|
||||||
|
id:btn_upload
|
||||||
|
implicitWidth: parent.width
|
||||||
|
implicitHeight: 36
|
||||||
|
text: "Upload File"
|
||||||
|
onClicked: {
|
||||||
|
file_dialog.open()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluProgressButton{
|
||||||
|
id:btn_download
|
||||||
|
implicitWidth: parent.width
|
||||||
|
implicitHeight: 36
|
||||||
|
text: "Download File"
|
||||||
|
onClicked: {
|
||||||
|
folder_dialog.showDialog(function(path){
|
||||||
|
FluNetwork.get("http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4")
|
||||||
|
.toDownload(path)
|
||||||
|
.bind(root)
|
||||||
|
.go(callable_download_file)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FluProgressButton{
|
||||||
|
id:btn_download_breakpoint
|
||||||
|
implicitWidth: parent.width
|
||||||
|
implicitHeight: 36
|
||||||
|
text: "Breakpoint Download File"
|
||||||
|
onClicked: {
|
||||||
|
folder_dialog.showDialog(function(path){
|
||||||
|
FluNetwork.get("http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4")
|
||||||
|
.toDownload(path,true)
|
||||||
|
.bind(root)
|
||||||
|
.go(callable_breakpoint_download_file)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FluNetworkCallable{
|
||||||
|
id:callable_upload_file
|
||||||
|
onStart: {
|
||||||
|
btn_upload.disabled = true
|
||||||
|
}
|
||||||
|
onFinish: {
|
||||||
|
btn_upload.disabled = false
|
||||||
|
}
|
||||||
|
onError:
|
||||||
|
(status,errorString,result)=>{
|
||||||
|
btn_upload.progress = 0
|
||||||
|
text_info.text = result
|
||||||
|
console.debug(status+";"+errorString+";"+result)
|
||||||
|
}
|
||||||
|
onSuccess:
|
||||||
|
(result)=>{
|
||||||
|
text_info.text = result
|
||||||
|
}
|
||||||
|
onUploadProgress:
|
||||||
|
(sent,total)=>{
|
||||||
|
btn_upload.progress = sent/total
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FluNetworkCallable{
|
||||||
|
id:callable_download_file
|
||||||
|
onStart: {
|
||||||
|
btn_download.progress = 0
|
||||||
|
btn_download.disabled = true
|
||||||
|
}
|
||||||
|
onFinish: {
|
||||||
|
btn_download.disabled = false
|
||||||
|
}
|
||||||
|
onError:
|
||||||
|
(status,errorString,result)=>{
|
||||||
|
btn_download.progress = 0
|
||||||
|
showError(errorString)
|
||||||
|
console.debug(status+";"+errorString+";"+result)
|
||||||
|
}
|
||||||
|
onSuccess:
|
||||||
|
(result)=>{
|
||||||
|
showSuccess(result)
|
||||||
|
}
|
||||||
|
onDownloadProgress:
|
||||||
|
(recv,total)=>{
|
||||||
|
btn_download.progress = recv/total
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FluNetworkCallable{
|
||||||
|
id:callable_breakpoint_download_file
|
||||||
|
onStart: {
|
||||||
|
btn_download_breakpoint.progress = 0
|
||||||
|
btn_download_breakpoint.disabled = true
|
||||||
|
}
|
||||||
|
onFinish: {
|
||||||
|
btn_download_breakpoint.disabled = false
|
||||||
|
}
|
||||||
|
onError:
|
||||||
|
(status,errorString,result)=>{
|
||||||
|
btn_download_breakpoint.progress = 0
|
||||||
|
showError(errorString)
|
||||||
|
console.debug(status+";"+errorString+";"+result)
|
||||||
|
}
|
||||||
|
onSuccess:
|
||||||
|
(result)=>{
|
||||||
|
showSuccess(result)
|
||||||
|
}
|
||||||
|
onDownloadProgress:
|
||||||
|
(recv,total)=>{
|
||||||
|
btn_download_breakpoint.progress = recv/total
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FileDialog {
|
||||||
|
id: file_dialog
|
||||||
|
onAccepted: {
|
||||||
|
FluNetwork.postForm("https://httpbingo.org/post")
|
||||||
|
.setRetry(1)//只请求一次
|
||||||
|
.add("accessToken","12345678")
|
||||||
|
.addFile("file",FluTools.toLocalPath(file_dialog.currentFile))
|
||||||
|
.bind(root)
|
||||||
|
.go(callable_upload_file)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FileDialog {
|
||||||
|
property var onSelectListener
|
||||||
|
id: folder_dialog
|
||||||
|
folder: StandardPaths.standardLocations(StandardPaths.DownloadLocation)[0]
|
||||||
|
currentFile: StandardPaths.standardLocations(StandardPaths.DownloadLocation)[0]+"/big_buck_bunny.mp4"
|
||||||
|
fileMode: FileDialog.SaveFile
|
||||||
|
onAccepted: {
|
||||||
|
folder_dialog.onSelectListener(FluTools.toLocalPath(folder_dialog.currentFile))
|
||||||
|
}
|
||||||
|
function showDialog(listener){
|
||||||
|
folder_dialog.onSelectListener = listener
|
||||||
|
folder_dialog.open()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FluArea{
|
||||||
|
anchors{
|
||||||
|
top: layout_flick.top
|
||||||
|
bottom: layout_flick.bottom
|
||||||
|
left: layout_flick.right
|
||||||
|
right: parent.right
|
||||||
|
leftMargin: 8
|
||||||
|
}
|
||||||
|
Flickable{
|
||||||
|
clip: true
|
||||||
|
id:scrollview
|
||||||
|
boundsBehavior:Flickable.StopAtBounds
|
||||||
|
width: parent.width
|
||||||
|
height: parent.height
|
||||||
|
contentWidth: width
|
||||||
|
contentHeight: text_info.height
|
||||||
|
ScrollBar.vertical: FluScrollBar {}
|
||||||
|
FluText{
|
||||||
|
id:text_info
|
||||||
|
width: scrollview.width
|
||||||
|
wrapMode: Text.WrapAnywhere
|
||||||
|
padding: 14
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -16,9 +16,12 @@ FluScrollablePage{
|
|||||||
height: 400
|
height: 400
|
||||||
paddings: 10
|
paddings: 10
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
FluPivot{
|
FluPivot{
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
currentIndex: 2
|
currentIndex: 2
|
||||||
|
|
||||||
FluPivotItem{
|
FluPivotItem{
|
||||||
title:"All"
|
title:"All"
|
||||||
contentItem:FluText{
|
contentItem:FluText{
|
||||||
|
@ -3,7 +3,6 @@ import QtQuick.Controls 2.15
|
|||||||
import QtQuick.Layouts 1.15
|
import QtQuick.Layouts 1.15
|
||||||
import QtQuick.Window 2.15
|
import QtQuick.Window 2.15
|
||||||
import FluentUI 1.0
|
import FluentUI 1.0
|
||||||
import QtGraphicalEffects 1.15
|
|
||||||
import "qrc:///example/qml/component"
|
import "qrc:///example/qml/component"
|
||||||
import "../component"
|
import "../component"
|
||||||
|
|
||||||
@ -33,6 +32,7 @@ FluScrollablePage{
|
|||||||
FluTextBox{
|
FluTextBox{
|
||||||
id:text_box
|
id:text_box
|
||||||
text:"会磨刀的小猪"
|
text:"会磨刀的小猪"
|
||||||
|
Layout.preferredWidth: 240
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user