Compare commits

...

839 Commits
1.3.3 ... 1.7.6

Author SHA1 Message Date
ef65183320 Merge branch '1.7.6-dev' 2024-06-04 17:53:17 +08:00
2e379fcd7e Merge pull request #518 from ArcticLampyrid/patch-1
Make static lib available (#509)
2024-05-31 12:51:28 +05:30
0a8732c91b Merge pull request #519 from ArcticLampyrid/patch-2
remove `registerForWindowResult` which is not used (#506)
2024-05-31 12:50:24 +05:30
b98c5d327a remove registerForWindowResult which is not used (#506) 2024-05-31 14:02:33 +08:00
7163c739c2 make static lib available (#509) 2024-05-31 13:59:36 +08:00
5cfd9824a8 update 2024-05-19 13:40:36 +08:00
a27554bfb2 update 2024-05-17 21:27:41 +08:00
7a67ccc1e1 update 2024-05-17 21:19:10 +08:00
39f58278ff update 2024-05-16 01:26:59 +08:00
354f7f2e3e add hotkey 2024-05-16 00:35:04 +08:00
876b230141 update 2024-05-13 18:28:28 +08:00
2367c6978a update 2024-05-11 22:21:11 +08:00
6b941697b0 update 2024-05-11 21:45:45 +08:00
4997b991db update 2024-05-10 19:23:30 +08:00
cd3abc01e9 fix bug 2024-05-10 19:20:01 +08:00
e6c4b79298 Merge branch 'main' into 1.7.6-dev
# Conflicts:
#	src/Qt5/imports/FluentUI/Controls/FluRadioButtons.qml
#	src/Qt6/imports/FluentUI/Controls/FluRadioButtons.qml
2024-05-10 12:26:14 +08:00
f830d5a9bf Merge branch 'main' of https://github.com/zhuzichu520/FluentUI 2024-05-09 19:41:15 +08:00
ed49e3f6af Merge pull request #499 from gao-xiangyang/main
info提示语支持主动调用函数关闭,支持关闭所有info框的函数
2024-05-09 17:10:34 +05:30
9aa6615189 FluRadioButtons 组件支持 disabled、manuallyDisabled选项
disabled: true // 禁用所有FluRadioButton子组件
        manuallyDisabled: true // 是否指定每个FluRadioButton上的disabled选项
2024-05-08 21:10:00 +08:00
c36515f19c info提示语支持主动调用函数关闭,支持关闭所有info框的函数 2024-05-08 20:35:31 +08:00
402579f32a update 2024-05-08 18:58:22 +08:00
655eff4f62 update 2024-05-07 22:16:42 +08:00
b916221d9f update 2024-05-07 21:47:40 +08:00
4cca680029 update 2024-05-05 22:05:18 +08:00
fe2543ab4d fix bug 2024-05-05 22:03:41 +08:00
394a42cb94 update 2024-05-05 21:33:47 +08:00
ac253a3de5 fix bug 2024-05-05 20:32:48 +08:00
0d61e33ef1 update 2024-05-05 15:52:46 +08:00
132ab12c32 update 2024-05-05 00:06:01 +08:00
af270951da update 2024-05-04 23:56:20 +08:00
18685b17ec update 2024-05-03 16:56:40 +08:00
0eb4d9f346 update 2024-05-03 01:54:38 +08:00
8015dcc2f1 update 2024-05-02 23:52:30 +08:00
0b1755e9eb update 2024-05-01 01:11:25 +08:00
e471d5a230 update 2024-04-30 19:38:05 +08:00
f922978338 update 2024-04-30 19:27:57 +08:00
91bda2a22c update 2024-04-30 13:07:46 +08:00
6638fe2e06 update 2024-04-30 13:06:27 +08:00
bf001d99d2 update 2024-04-30 12:59:09 +08:00
30531079b5 update 2024-04-29 10:12:34 +08:00
a746bc2684 update 2024-04-28 21:05:43 +08:00
96a6d0e7fa update 2024-04-28 20:22:05 +08:00
c733f3c60e update 2024-04-28 18:38:37 +08:00
effd9f3058 update 2024-04-28 18:19:21 +08:00
d93aac3518 update 2024-04-28 15:56:37 +08:00
5f6745b630 udpate 2024-04-28 13:03:20 +08:00
4f202831b8 Merge branch 'main' of https://github.com/zhuzichu520/FluentUI 2024-04-28 10:51:29 +08:00
29cee84edd update 2024-04-28 10:51:13 +08:00
2d4e61445e Merge pull request #488 from yanhuacuo/path-for-insertRow
Add the functionality to insert new rows into the table
2024-04-28 10:47:28 +08:00
cc79854191 Merge pull request #489 from w-jt/main
FluPagination.qml 添加自定义控件,通过header和footer属性添加控件
2024-04-28 10:46:47 +08:00
500efa6298 添加自定义控件,通过header和footer属性添加控件
添加自定义控件,通过header和footer属性添加控件
2024-04-27 11:54:42 +08:00
355332da96 添加自定义控件,通过header和footer属性添加控件
添加自定义控件,通过header和footer属性添加控件
2024-04-27 11:53:57 +08:00
a0d662a8a5 添加自定义控件,通过header和footer属性添加控件
添加自定义控件,通过header和footer属性添加控件
2024-04-27 11:49:29 +08:00
aecc3fe3b4 添加自定义控件,通过header和footer属性添加控件
添加自定义控件,通过header和footer属性添加控件
2024-04-27 11:48:19 +08:00
3554fb99cd Add the functionality to insert new rows into the table 2024-04-27 09:40:37 +08:00
24fdff7e35 fix bug 2024-04-25 00:08:18 +08:00
d2fdd08604 update 2024-04-24 17:24:31 +08:00
1f5d6ce1aa update 2024-04-24 17:12:00 +08:00
5fd7c7d10e update 2024-04-24 10:37:15 +08:00
83507a6ed5 update 2024-04-24 09:57:28 +08:00
789d9164a1 Merge branch '1.7.5-dev' 2024-04-24 09:53:59 +08:00
cb44759978 update 2024-04-23 22:38:39 +08:00
04c52b1b25 fix bug 2024-04-23 21:19:32 +08:00
b8ef9169b9 update 2024-04-23 19:33:05 +08:00
c7de653ba2 update 2024-04-23 13:41:26 +08:00
2ddb7e3290 update 2024-04-23 00:32:15 +08:00
e8d79e3c7b update 2024-04-23 00:31:20 +08:00
bc4510077f update 2024-04-19 01:04:13 +08:00
179bc8b21f update 2024-04-19 00:42:35 +08:00
8fe4e3b047 update 2024-04-17 22:05:49 +08:00
a443f3a9ba update 2024-04-17 21:39:55 +08:00
1a0f2afee0 update 2024-04-17 15:11:14 +08:00
c9c737f2fc update 2024-04-16 12:36:41 +08:00
f0f00b9eba Merge pull request #483 from mariuszmaximus/main
fix for msys2
2024-04-15 12:39:47 +08:00
956f2e0ad0 fix for msys2 2024-04-14 19:38:52 +02:00
ecd13a9cca update 2024-04-15 00:11:41 +08:00
17bfff2346 update 2024-04-14 23:58:15 +08:00
295dcf02c4 update 2024-04-14 23:09:41 +08:00
f701f97756 update 2024-04-14 11:43:32 +08:00
2c4cf82f63 update 2024-04-13 22:00:15 +08:00
e8c47e0fd8 update 2024-04-13 21:30:23 +08:00
9296b18606 update 2024-04-13 10:51:24 +08:00
481e19c8cc update 2024-04-13 10:50:27 +08:00
44f7948df3 update 2024-04-12 16:50:49 +08:00
0ab315e258 update 2024-04-12 16:26:32 +08:00
44acdbcf7f update 2024-04-11 20:29:59 +08:00
3997daaa11 update 2024-04-11 19:18:37 +08:00
531f659e59 update 2024-04-11 15:27:15 +08:00
3f6ef13cd0 update 2024-04-11 15:09:47 +08:00
96fef84c2d update 2024-04-11 14:56:22 +08:00
a3f375c9ef update 2024-04-11 14:51:43 +08:00
6a31e86505 update 2024-04-09 20:53:52 +08:00
6ebd659e13 update 2024-04-04 22:47:07 +08:00
bd8c80feb8 update 2024-04-04 17:43:58 +08:00
6b617d10d5 update 2024-04-04 17:08:45 +08:00
cf163f5e3b update 2024-04-04 16:53:31 +08:00
b4329fdd0a update 2024-04-04 12:11:08 +08:00
84b2045b5f update 2024-04-04 02:48:26 +08:00
18193a18be update 2024-04-04 02:01:52 +08:00
fe08b08c1f update 2024-04-04 01:10:14 +08:00
ef96618151 update 2024-04-03 21:52:26 +08:00
be34220652 update 2024-04-03 19:31:01 +08:00
5cf0812562 update 2024-04-03 19:30:15 +08:00
c2b845658d update 2024-04-03 13:24:30 +08:00
eb4ec242b1 update 2024-04-03 11:28:18 +08:00
a95916ab03 update 2024-04-03 11:19:35 +08:00
bf5bedc9ed update 2024-04-03 11:09:35 +08:00
7d1666597f update 2024-04-02 00:32:06 +08:00
da9f63eb24 update 2024-03-31 21:56:11 +08:00
68015776ab update 2024-03-31 21:52:06 +08:00
d222cb640c update 2024-03-31 11:17:05 +08:00
0ab7f811e3 update 2024-03-31 10:59:15 +08:00
6a5f9d04a9 update 2024-03-29 16:56:09 +08:00
cb33af8836 update 2024-03-29 16:23:16 +08:00
5fd934b5f5 update 2024-03-29 00:51:55 +08:00
b7fde5f79c update 2024-03-29 00:48:58 +08:00
41cbeef3fd update 2024-03-28 19:18:56 +08:00
f616a2da6a update 2024-03-27 14:13:36 +08:00
b6c3f0eda9 update 2024-03-27 10:52:47 +08:00
06aa16c0eb update 2024-03-27 10:25:58 +08:00
c52439ac39 update 2024-03-27 09:45:56 +08:00
e81a2cc849 update 2024-03-27 00:36:56 +08:00
485bcc8acc update 2024-03-25 22:17:05 +08:00
07fedb43a8 update 2024-03-25 21:01:47 +08:00
d6c0492665 update 2024-03-25 14:43:23 +08:00
9d06c6d1e9 update 2024-03-24 22:12:20 +08:00
0ca486dfa1 fix bug 2024-03-24 12:45:34 +08:00
3257f59c68 update 2024-03-24 10:50:01 +08:00
ff68491baf update 2024-03-24 10:27:16 +08:00
247b8db7c4 update 2024-03-24 10:20:50 +08:00
07a43825d1 update 2024-03-24 10:17:20 +08:00
e0254f2f80 fix bug 2024-03-23 22:28:14 +08:00
37101c97c5 update 2024-03-23 22:17:03 +08:00
7e1490f8f4 update 2024-03-22 12:59:39 +08:00
98770cb907 update 2024-03-21 13:33:35 +08:00
bd942659df update 2024-03-21 11:30:17 +08:00
796be2a8f2 update FluWindowDialog 2024-03-21 11:29:49 +08:00
d655dc0141 update 2024-03-20 23:35:15 +08:00
5f6c468043 update 2024-03-20 18:40:40 +08:00
2311c12d57 update 2024-03-20 18:39:17 +08:00
9aed03a589 update 2024-03-20 18:33:44 +08:00
6b5b8a6b57 update 2024-03-20 12:44:35 +08:00
d60002f3d9 update 2024-03-20 09:57:06 +08:00
ea8f25ff73 update 2024-03-19 18:06:58 +08:00
89c183afd5 update 2024-03-19 12:50:16 +08:00
72cf0311c0 update 2024-03-18 22:48:13 +08:00
1a6c53d0ce update 2024-03-18 22:26:22 +08:00
77bb12b164 update 2024-03-18 22:11:39 +08:00
d01f9019c0 解决FluTableView快速滚动卡顿问题 2024-03-18 18:26:37 +08:00
0e7606b646 update 2024-03-18 17:19:36 +08:00
2e0081322f update 2024-03-18 17:13:20 +08:00
a587443ea7 update 2024-03-18 17:07:44 +08:00
47bde34671 update 2024-03-18 14:10:50 +08:00
df2e461084 update 2024-03-18 00:14:50 +08:00
3cc615318a update 2024-03-17 15:56:24 +08:00
c4cf4c13b8 update 2024-03-17 11:17:59 +08:00
f8dee135a1 update 2024-03-15 22:40:41 +08:00
d2de626f78 update version 2024-03-15 22:18:35 +08:00
a184e6b7df update 2024-03-15 22:18:02 +08:00
7c4bedb907 update 2024-03-15 22:02:30 +08:00
2d2f991128 update 2024-03-15 22:00:47 +08:00
3f7555d4e6 update 2024-03-15 18:16:01 +08:00
9d5765eafe update 2024-03-15 12:19:38 +08:00
2dbbaa50f7 update 2024-03-15 00:15:52 +08:00
1c63d027bb update 2024-03-15 00:10:27 +08:00
479e21097c update FluCalendarPicker 2024-03-15 00:04:15 +08:00
874e861c64 update version 2024-03-14 10:01:56 +08:00
d420282dd8 update 2024-03-13 19:14:56 +08:00
099e966d9b update 2024-03-13 17:54:11 +08:00
e11f1a1232 update 2024-03-12 22:59:56 +08:00
80f8f5f01e update 2024-03-12 17:14:47 +08:00
cfb961408b update 2024-03-12 16:14:10 +08:00
3bfe4dd12c update 2024-03-12 12:19:14 +08:00
f4e36241ba update 2024-03-12 10:31:19 +08:00
dfc579ef3e fix bug #459 2024-03-12 00:00:02 +08:00
f56f16c858 update 2024-03-11 22:55:07 +08:00
2a514b52bd update 2024-03-11 22:24:47 +08:00
463aa38bc2 update 2024-03-11 18:55:33 +08:00
38a277801d fix bug #455 2024-03-11 12:36:20 +08:00
d79a7df389 update 2024-03-11 00:02:11 +08:00
ea69589c0a update 2024-03-10 12:01:31 +08:00
db89d2485c fix bug #455 2024-03-10 10:12:34 +08:00
b3e26d17a2 update 2024-03-09 23:42:01 +08:00
0e55f31fe2 Merge branch 'main' of https://github.com/zhuzichu520/FluentUI 2024-03-09 22:39:39 +08:00
f624007fec update 2024-03-09 22:39:34 +08:00
65844ef105 Merge pull request #456 from mentalfl0w/patch-1
CMakeLists: simplify code.
2024-03-09 22:39:08 +08:00
799df5c644 CMakeLists: simplify code. 2024-03-09 22:33:51 +08:00
afd888d7a0 update 2024-03-09 22:26:21 +08:00
1d5f8772e1 update 2024-03-09 22:19:10 +08:00
eff9e385f5 update 2024-03-09 19:46:02 +08:00
a43637f75e Merge branch 'main' of https://github.com/zhuzichu520/FluentUI 2024-03-09 18:40:37 +08:00
86c8d54eea update 2024-03-09 18:40:32 +08:00
97b9a789b0 update 2024-03-09 18:26:54 +08:00
7c0c4cc451 update 2024-03-09 15:35:48 +08:00
031fb35cce Merge pull request #451 from imaben/combobox-style
change style for ComboBox
2024-03-08 17:07:33 +08:00
af7dd711a1 change style for ComboBox 2024-03-08 10:29:38 +08:00
2a03f24941 update 2024-03-07 13:58:23 +08:00
723c2a864a Merge pull request #450 from mentalfl0w/main
static build: remove unused code.
2024-03-06 21:06:32 +08:00
0d9d459d68 update 2024-03-06 21:00:49 +08:00
bbca8bfa5a static build: remove unused code. 2024-03-06 20:54:41 +08:00
2ae2e2509a update 2024-03-06 00:34:43 +08:00
1baa1ca754 update FluTableView 2024-03-04 11:31:32 +08:00
26311d6342 update 2024-03-03 01:19:03 +08:00
644a0e509f update 2024-03-03 01:14:54 +08:00
07de3b82b1 update 2024-03-02 23:37:25 +08:00
76aa9a87c5 Merge pull request #442 from yangxingpping/main
vs2019下example退出之后程序会崩溃
2024-03-02 11:37:46 +08:00
abc
04eaed1d69 Merge branch 'main' of https://github.com/zhuzichu520/FluentUI 2024-03-02 08:46:01 +08:00
abc
6c2c125332 fix crash before exit program with vs2019 2024-03-02 08:45:58 +08:00
72b777dec3 update FluTableView 2024-03-01 23:24:03 +08:00
6a73ac97df fix bug #439 2024-03-01 00:19:41 +08:00
e2d52f55b9 fix bug #439 2024-03-01 00:19:12 +08:00
38612f0ebc fix bug #440 2024-02-28 17:37:53 +08:00
4f2fcd8865 update 2024-02-28 10:25:22 +08:00
e4413419b8 update 2024-02-28 10:10:55 +08:00
eb276e7179 update 2024-02-27 22:09:39 +08:00
2f1689acd0 update 2024-02-27 16:56:55 +08:00
94c3ec83b3 fix bug #436 2024-02-27 16:27:48 +08:00
90809f5042 update 2024-02-27 15:38:45 +08:00
62aead3855 fix bug 2024-02-27 14:02:02 +08:00
19a947ffab update 2024-02-27 13:39:07 +08:00
6749e47c22 update 2024-02-27 12:23:24 +08:00
fce7f8c40c update 2024-02-26 23:12:12 +08:00
50f7071172 fix bug #436 2024-02-26 18:28:35 +08:00
d9e10efe9c update 2024-02-26 18:22:30 +08:00
9ced60de1e update 2024-02-26 15:50:42 +08:00
d0fe68eed3 update 2024-02-25 20:15:21 +08:00
355517ed44 update 2024-02-25 19:31:40 +08:00
163c07f7b7 update 2024-02-25 14:37:26 +08:00
ca2ac72fa8 update 2024-02-25 13:44:11 +08:00
86c94c6c75 fix bug #435 2024-02-25 11:52:00 +08:00
5c1e67f3b6 update CodeExpander.qml 2024-02-24 23:20:12 +08:00
84b3a367b2 update 2024-02-24 22:26:54 +08:00
a02ee68483 update 2024-02-23 21:10:04 +08:00
c330dc840e update 2024-02-23 12:26:10 +08:00
438d1fe623 update 2024-02-21 13:29:22 +08:00
e92b1dbea6 fix bug 2024-02-20 22:12:16 +08:00
4d4c0f2259 fix bug 2024-02-20 21:20:50 +08:00
991ef8809a update 2024-02-19 17:32:42 +08:00
abc396d619 fix bug #425 2024-02-19 17:32:12 +08:00
28a36b16e9 update 2024-02-19 11:44:07 +08:00
c50583d66a Merge pull request #429 from maplefater/patch-2
fix(FluSplitLayout): solve binding loop on qt 6.6.0
2024-02-05 20:46:08 +08:00
dbe70f8212 fix(FluSplitLayout): solve binding loop on qt 6.6.0 2024-02-05 11:29:52 +08:00
93f73b034d Merge pull request #423 from maplefater/patch-1
fix typo in README.md
2024-02-02 21:10:39 +08:00
f2edf8d12f Merge pull request #424 from mentalfl0w/main
Workflow: update.
2024-02-02 21:10:31 +08:00
1f90b7c734 Workflow: update. 2024-01-31 20:00:33 +08:00
ed411d986f fix typo in README.md 2024-01-31 15:43:12 +08:00
0222a2111d fix bug #403 2024-01-31 11:13:37 +08:00
a6001ea142 update 2024-01-30 20:16:54 +08:00
41f40d2313 fix bug #421 2024-01-30 15:10:47 +08:00
649dfdd317 update 2024-01-30 15:10:06 +08:00
a705577cba update 2024-01-30 11:45:08 +08:00
9bc5794db8 fix bug #418 2024-01-30 11:21:19 +08:00
3b1ab88b6d update 2024-01-29 20:19:17 +08:00
6a19b47508 update 2024-01-29 18:03:44 +08:00
cf2657078b update 2024-01-29 16:37:24 +08:00
1b0bd0e750 update 2024-01-29 16:36:30 +08:00
5056dc57cf update 2024-01-29 11:46:34 +08:00
190b14eed6 fix bug #418 2024-01-29 11:11:38 +08:00
3933026de3 fix bug #419 2024-01-29 09:17:45 +08:00
74c2dfed5b update 2024-01-25 17:26:50 +08:00
08dbd1d11b update 2024-01-25 17:06:38 +08:00
3dfca40680 fix bug #412 2024-01-24 15:41:10 +08:00
9361d7b2eb update CmakeLists.txt 2024-01-22 16:38:20 +08:00
93832fb325 fix bug #408 2024-01-22 15:41:43 +08:00
d6325b4f5b fix bug #408 2024-01-22 15:32:45 +08:00
53d28448e0 update 2024-01-20 16:26:04 +08:00
5b7bd8a774 update 2024-01-17 15:33:05 +08:00
0f3910c96b update 2024-01-17 14:00:20 +08:00
4cfd14e9bd update 2024-01-09 21:57:02 +08:00
e295b61596 update 2024-01-09 18:07:36 +08:00
fe8083fcb1 fix bug #397 and #393 2024-01-09 00:17:30 +08:00
7546547364 update 2024-01-08 17:43:46 +08:00
4dbb68abf6 update 2024-01-08 17:11:16 +08:00
d37cd00322 update 2024-01-08 17:03:24 +08:00
f04bc2951f update 2024-01-08 16:40:19 +08:00
993de241cb fix bug #398 2024-01-08 14:07:38 +08:00
cd7ce7fe67 update 2024-01-08 10:43:25 +08:00
d397b88892 update 2024-01-05 20:00:28 +08:00
ae2d517ad0 update 2024-01-05 18:18:08 +08:00
fde1b5ff3a Merge branch 'main' of https://github.com/zhuzichu520/FluentUI 2024-01-05 11:36:53 +08:00
53ba535abc update 2024-01-05 11:36:22 +08:00
5ea480afcb update 2024-01-04 18:49:06 +08:00
9d47c30a6b update 2024-01-04 18:46:33 +08:00
833a8217f4 update 2024-01-04 18:00:44 +08:00
3a0f6355c8 update 2024-01-04 14:28:51 +08:00
28a42d7ecc Merge pull request #392 from mentalfl0w/main
Use more elegant singleton and fix spell bug.
2024-01-04 10:22:43 +08:00
8778ca85a3 Use more elegant singleton and fix spell bug. 2024-01-04 00:26:42 +08:00
bb19554215 update 2024-01-03 21:21:33 +08:00
e0c28e2693 update 2024-01-03 17:48:10 +08:00
1d917baac7 update 2024-01-03 16:56:28 +08:00
cc4e88adbd update 2024-01-02 22:55:17 +08:00
284afed52f update 2024-01-02 22:33:47 +08:00
924ce5d127 update 2024-01-02 18:31:44 +08:00
0e0a385f2d update 2024-01-02 18:27:59 +08:00
1464e647d9 update 2024-01-02 16:56:28 +08:00
0241ecd07f update 2024-01-02 14:53:53 +08:00
0cad207359 update 2024-01-02 13:04:28 +08:00
00e028be07 update 2024-01-01 20:38:18 +08:00
4f66c546a8 update 2024-01-01 20:01:46 +08:00
475d293906 update 2023-12-31 11:20:48 +08:00
a6b8e656f3 update 2023-12-31 00:08:18 +08:00
4b84e9175d update 2023-12-30 22:31:56 +08:00
475cb54d73 update 2023-12-30 22:03:49 +08:00
b0edf23f33 update 2023-12-30 21:10:49 +08:00
c123db97b7 update 2023-12-30 20:34:14 +08:00
1450016c69 update 2023-12-30 20:33:33 +08:00
6221eb4178 update 2023-12-29 23:09:46 +08:00
42f0987e73 update 2023-12-29 17:38:04 +08:00
99ff310448 update 2023-12-29 11:13:10 +08:00
bf5c722058 update 2023-12-29 11:04:54 +08:00
8253fb611f update 2023-12-29 00:40:18 +08:00
0b0fbe1e64 update 2023-12-28 23:21:30 +08:00
2d1957afe3 update 2023-12-28 22:55:38 +08:00
823721ab8c update 2023-12-28 21:30:27 +08:00
bf074da658 update 2023-12-28 21:20:47 +08:00
91a692484f update 2023-12-28 20:47:36 +08:00
46f7299362 update 2023-12-28 15:07:04 +08:00
9f652a7c76 update 2023-12-28 14:27:19 +08:00
9adb6b645b update 2023-12-28 12:42:22 +08:00
2cfc73c00b update 2023-12-22 18:07:46 +08:00
d817782526 update 2023-12-22 12:39:04 +08:00
9dd9d10049 update 2023-12-22 02:09:47 +08:00
fa6b5cfc45 update 2023-12-22 01:30:25 +08:00
217ceabbaa update 2023-12-21 18:12:43 +08:00
83a66b3f15 update 2023-12-21 10:44:46 +08:00
3239e6f12c update 2023-12-20 22:00:10 +08:00
1c67f2a41b update 2023-12-20 21:58:59 +08:00
0b7358af41 fix bug #377 2023-12-20 18:06:46 +08:00
a851696eb0 fix bug #377 2023-12-20 18:01:09 +08:00
f6cc83123b update 2023-12-20 17:17:41 +08:00
70e525f51e update 2023-12-20 09:36:19 +08:00
72610da66e update 2023-12-19 20:28:14 +08:00
fde55d254c update 2023-12-19 20:15:48 +08:00
61659b5e31 update 2023-12-19 20:02:15 +08:00
f4112ee5dc update 2023-12-19 18:07:53 +08:00
f973f006d2 update 2023-12-19 18:01:49 +08:00
38ea91964e update 2023-12-19 10:52:39 +08:00
af6e39d8c0 update 2023-12-18 23:56:28 +08:00
6d2a8cde7a update 2023-12-18 22:24:24 +08:00
2bd0a831e7 update 2023-12-18 21:32:56 +08:00
1bf992ed69 fix bug #373 2023-12-18 21:29:38 +08:00
ecd0f29d30 update 2023-12-16 15:25:37 +08:00
5e38493403 update 2023-12-15 22:47:22 +08:00
c5aad9feed update 2023-12-15 22:41:11 +08:00
d347512486 update 2023-12-15 18:17:17 +08:00
136e2c72af update 2023-12-15 16:45:59 +08:00
95f48b51bf update 2023-12-15 16:04:00 +08:00
7ba06d183d update 2023-12-15 11:25:54 +08:00
9ee50a585a update 2023-12-14 23:50:58 +08:00
c95ac86377 update 2023-12-14 22:06:26 +08:00
5787e308dd update 2023-12-14 21:16:09 +08:00
08c458c2a1 update 2023-12-14 14:43:49 +08:00
299eba18ac update 2023-12-14 11:46:51 +08:00
6da8117056 update 2023-12-14 09:41:14 +08:00
e5668869b9 update 2023-12-13 23:43:01 +08:00
65905b139e update 2023-12-13 21:28:21 +08:00
6974b0efa6 update 2023-12-13 18:13:35 +08:00
3c924bb0de update 2023-12-13 17:31:08 +08:00
ec2378a07a update 2023-12-13 16:20:09 +08:00
863c88411b update 2023-12-12 00:49:12 +08:00
6b6dbf27a1 update 2023-12-11 23:47:03 +08:00
dc37a151c8 update 2023-12-11 23:43:17 +08:00
6c86e61916 FluNetwork add Head Request 2023-12-08 23:30:41 +08:00
33c203fcb3 update SettingsHelper 2023-12-08 17:30:50 +08:00
7086df10f0 FluNetwork add openLog funcation 2023-12-07 23:01:09 +08:00
13223a11a2 update 2023-12-07 20:52:17 +08:00
3d65bdc913 update 2023-12-07 18:13:58 +08:00
c80689e376 update 2023-12-07 11:51:59 +08:00
1abbc4593a add log level 2023-12-07 00:20:32 +08:00
c1ffce06aa update log 2023-12-06 23:57:30 +08:00
bd8a561590 update network 2023-12-06 18:23:51 +08:00
eed96b4c0e update 2023-12-05 21:32:23 +08:00
1b4fddec61 update 2023-12-05 18:16:06 +08:00
2c16f6f71a mv framelsshelper and zxing-cpp 2023-12-05 16:45:36 +08:00
3770969097 add chart example 2023-12-05 15:49:02 +08:00
d255f5881e update 2023-12-05 11:42:21 +08:00
711411f6a8 update 2023-12-05 00:20:40 +08:00
f5a4fc1300 fix log bug Chinese garbled character 2023-12-04 23:48:58 +08:00
bc0c36772f update 2023-12-04 21:52:57 +08:00
46148b3c5c update 2023-12-04 21:33:06 +08:00
b4f2f68135 update 2023-12-04 21:25:44 +08:00
5d4cfa5286 fix bug 2023-12-04 21:18:19 +08:00
ee23554cb4 update 2023-12-04 17:55:20 +08:00
a9772a8fb0 update T_Dialog 2023-12-04 17:35:05 +08:00
2428a38194 update FluContentDialog and FluShortcutPicker 2023-12-04 17:10:08 +08:00
1a21cd7b31 update 2023-12-02 23:29:55 +08:00
bcc47c1496 update 2023-12-02 23:04:02 +08:00
95a6be3d28 fix bug #361 2023-12-02 22:48:41 +08:00
9a48880e84 add ShortcutPicker 2023-12-01 18:14:10 +08:00
4f60459166 update 2023-11-30 11:13:01 +08:00
29749a5761 update 2023-11-30 10:59:09 +08:00
1b3344e9f9 update 2023-11-30 01:12:57 +08:00
394d0ab244 remove FluHttp 2023-11-29 21:35:06 +08:00
6a925bdad3 update network 2023-11-29 18:10:56 +08:00
6999067a80 Merge branch 'main' of https://github.com/zhuzichu520/FluentUI 2023-11-29 10:42:09 +08:00
1047fac4d6 update 2023-11-29 10:41:48 +08:00
3b2982a95e Merge pull request #358 from weypro/main
调整亚克力效果的噪点占比
2023-11-29 09:12:38 +08:00
wey
e37d47f629 调整亚克力效果的噪点占比
参考官方figma winui3设计稿,噪点图像占比为2%,不然看起来噪点太明显
2023-11-28 23:02:39 +08:00
d07383ba46 update 2023-11-28 20:09:44 +08:00
ce3da2e92f fix bug #357 2023-11-27 20:43:17 +08:00
2e8be5f133 update 2023-11-27 18:23:36 +08:00
8662eb97aa update 2023-11-27 16:45:37 +08:00
55a77eba4b Merge branch 'main' of https://github.com/zhuzichu520/FluentUI 2023-11-27 15:30:35 +08:00
5dd3320f66 fix bug #356 2023-11-27 15:29:54 +08:00
3b4c327528 update 2023-11-24 22:05:53 +08:00
412842d844 Merge pull request #336 from Pemvin/main
Update FluTour.qml
2023-11-24 21:19:06 +08:00
2242ffc367 update network 2023-11-24 18:04:26 +08:00
d485ec9e3b fix bug #351 2023-11-24 15:41:44 +08:00
05251e085c fix bug #351 2023-11-24 15:36:34 +08:00
78f5dd0a61 update FluNetwork 2023-11-24 15:35:40 +08:00
2f3ed2bd0f update 2023-11-23 19:58:54 +08:00
35d85aa801 update 2023-11-23 18:18:28 +08:00
542ea0a7b9 update 2023-11-21 18:12:11 +08:00
b981ecca7d update FluWindow 2023-11-21 14:28:37 +08:00
a7552e2b5c Update FluTour.qml 2023-11-17 10:06:53 +08:00
637a0f312e Merge branch 'zhuzichu520:main' into main 2023-11-17 09:16:32 +08:00
e3e4592ea4 update macos action 2023-11-16 10:10:50 +08:00
71c238e62b update 2023-11-16 00:22:55 +08:00
77ae88f518 update 2023-11-15 23:54:38 +08:00
2f9090858b update 2023-11-15 17:18:24 +08:00
5d11064011 Update FluTour.qml
Automatic place tour boxes above or below targets
2023-11-09 17:38:07 +08:00
dfb80e70ee fix bug #335 2023-11-08 17:05:09 +08:00
7618fe0f37 update 2023-11-08 13:44:11 +08:00
cbebb51d62 update 2023-11-08 10:30:22 +08:00
f0227c5686 Merge branch 'main' of https://github.com/zhuzichu520/FluentUI 2023-11-07 14:01:51 +08:00
24c8644d79 update 2023-11-07 14:01:28 +08:00
40ce63e1df Merge pull request #330 from kevinlq/main
FluNavigationView 组件增加了 tooltip 提示,交互更友好些。
2023-11-07 10:48:59 +08:00
cc4abbf79f feat:The FluNavigationView component adds a Tooltip prompt to make the interaction more friendly. 2023-11-06 23:25:22 +08:00
35921ed900 update 2023-11-05 17:24:08 +08:00
661529f1f4 update 2023-11-04 22:06:05 +08:00
139c5c455d update 2023-11-04 21:58:21 +08:00
3460b59839 update 2023-11-04 21:46:31 +08:00
bdbd5d295e update 2023-11-04 11:12:54 +08:00
51637fceca update 2023-11-04 10:50:26 +08:00
7f542edba7 update 2023-11-03 13:21:15 +08:00
0b124ec9ee update 2023-11-02 23:07:55 +08:00
fa77ed6163 update 2023-11-02 23:02:08 +08:00
eef46a2dac update 2023-11-02 22:14:00 +08:00
f856fd44c1 update 2023-11-02 20:22:23 +08:00
35bfb8021f update 2023-11-02 17:14:07 +08:00
29012f0b68 update 2023-11-02 16:56:29 +08:00
54b98c8e05 update 2023-11-02 15:33:59 +08:00
20852ac6bf update 2023-11-02 11:34:02 +08:00
636dddaa84 update 2023-11-01 21:06:56 +08:00
50a6103584 update 2023-10-30 14:45:22 +08:00
a693db76c8 update 2023-10-22 12:33:19 +08:00
25e385c06e Merge pull request #321 from kevinlq/main
优化FluComboBox.qml 下拉框显示效果
2023-10-21 22:16:29 +08:00
777459e35d Merge branch 'main' of https://github.com/kevinlq/FluentUI 2023-10-21 22:07:11 +08:00
9bdc6c45cd feat: Fixed the problem that the Flu ComboBox quick drop-down display is empty, and the ListView cancels the rebound effect. 2023-10-21 22:06:25 +08:00
fc618e96c5 update 2023-10-21 22:03:26 +08:00
cac1864d65 update 2023-10-21 11:57:35 +08:00
9846415838 update 2023-10-21 00:26:15 +08:00
840ae7ec2f update 2023-10-21 00:19:47 +08:00
05f51c788e update 2023-10-21 00:02:56 +08:00
19a5883e76 update 2023-10-20 23:52:34 +08:00
da0184f70e update 2023-10-20 22:19:46 +08:00
ea79becd08 update 2023-10-20 22:12:10 +08:00
1e5c70c7b4 update 2023-10-20 21:32:11 +08:00
c6a43c41db update 2023-10-20 21:28:51 +08:00
5f6d66b6ce update 2023-10-20 18:04:58 +08:00
83f94630f1 update 2023-10-19 22:52:36 +08:00
ac63514451 update 2023-10-19 15:25:07 +08:00
4d197d2697 update 2023-10-18 22:45:01 +08:00
b78aaaad48 update 2023-10-18 22:37:01 +08:00
3784a86936 update 2023-10-18 15:18:38 +08:00
0ee0c8c68f update 2023-10-17 23:26:04 +08:00
ec2ddc24eb update 2023-10-17 23:13:57 +08:00
baf5438262 update 2023-10-17 23:04:41 +08:00
b452218e79 update 2023-10-17 23:02:45 +08:00
cb5b9d8541 update 2023-10-17 22:38:04 +08:00
4ec772fff2 Merge branch 'main' of https://github.com/zhuzichu520/FluentUI 2023-10-17 22:18:15 +08:00
8f9c529153 update 2023-10-17 22:18:12 +08:00
483c5f8e09 Merge pull request #316 from imaben/hotfix-pivot-style
optimize style for FluPivot
2023-10-17 22:15:46 +08:00
0402b07dba optimize style for FluPivot 2023-10-17 21:53:36 +08:00
ee071ee451 update 2023-10-17 16:27:44 +08:00
487cbefd82 update 2023-10-17 16:11:09 +08:00
b836b25028 update 2023-10-17 15:17:05 +08:00
0eacc177d0 update 2023-10-17 14:30:43 +08:00
9b5167d92e fix bug #315 2023-10-17 12:26:17 +08:00
3a775a8bb2 update 2023-10-17 10:34:37 +08:00
0030c44a6c fix bug #314 2023-10-17 09:23:23 +08:00
83cd2873c6 Merge pull request #313 from imaben/hotfix-ptr-check
fixed invalid pointer check
2023-10-17 09:12:46 +08:00
f385e34d23 fixed invalid pointer check 2023-10-16 19:24:25 +08:00
fc1b62d4a3 update 2023-10-16 17:31:59 +08:00
9985053f82 update 2023-10-16 13:56:09 +08:00
4b6fa1e65c update 2023-10-16 00:23:01 +08:00
f265753228 update 2023-10-15 23:57:37 +08:00
45b96faf7e update 2023-10-15 23:38:42 +08:00
473dec0990 update 2023-10-15 22:57:14 +08:00
939e04e4ca update 2023-10-15 17:24:33 +08:00
332c0ee54e update 2023-10-15 16:29:50 +08:00
d805147627 update 2023-10-14 13:18:45 +08:00
0ecab11e3c update 2023-10-14 01:34:00 +08:00
f0f2814d5e update 2023-10-14 01:24:01 +08:00
d71e474f40 update 2023-10-13 19:50:24 +08:00
aeca953d32 update 2023-10-13 18:38:27 +08:00
b1c0074a10 Merge branch 'main' of https://github.com/zhuzichu520/FluentUI 2023-10-13 09:23:18 +08:00
f2feb19d68 update 2023-10-13 01:12:36 +08:00
992d8c142c update 2023-10-12 18:25:08 +08:00
16da5f1633 update 2023-10-11 23:56:16 +08:00
1003b34139 update 2023-10-11 22:37:07 +08:00
a2e15fc3b0 update 2023-10-11 11:18:48 +08:00
fecbf48482 Update README.md 2023-10-10 23:05:04 +08:00
20d52ac49a update 2023-10-10 20:04:26 +08:00
e8a77613bc update 2023-10-10 18:31:22 +08:00
54f52e0886 update 2023-10-10 15:06:44 +08:00
79ab73105e update 2023-10-09 12:23:25 +08:00
2bd961ee77 update 2023-10-09 10:22:01 +08:00
17829bac69 update 2023-10-08 19:59:55 +08:00
1d68de9287 update 2023-10-08 19:48:32 +08:00
9e8e55cb73 Merge branch 'main' of https://github.com/zhuzichu520/FluentUI 2023-10-08 18:19:23 +08:00
29f363afdd update 2023-10-08 18:19:08 +08:00
ecced8abfb Merge pull request #304 from imaben/feat-delete-method
add delete method for http
2023-10-08 12:37:12 +08:00
5a49ffb7e0 add delete method for http 2023-10-08 11:38:57 +08:00
e631465231 update 2023-10-04 21:13:38 +08:00
50b1aaf8f5 update 2023-10-04 21:04:26 +08:00
93b55e7fea update 2023-10-04 19:28:05 +08:00
33fda1d025 update 2023-10-03 16:18:53 +08:00
a6e494d1c7 update 2023-10-03 10:36:19 +08:00
bfaff95fee update 2023-10-02 22:17:02 +08:00
f20bfc0466 update 2023-10-02 21:32:10 +08:00
69b371e807 update 2023-10-02 21:02:06 +08:00
b0545ffa2a update 2023-10-02 21:00:40 +08:00
91ba4d4792 update 2023-10-02 20:16:38 +08:00
3c7499c48b update 2023-10-02 10:16:23 +08:00
1b6743efeb update 2023-10-01 16:18:37 +08:00
68127a7303 update 2023-10-01 15:27:38 +08:00
895332f867 update 2023-10-01 14:59:35 +08:00
8127f7c3ed update 2023-09-29 20:40:27 +08:00
cbe26ce4cd update 2023-09-29 19:30:22 +08:00
c048336de1 update 2023-09-29 18:15:24 +08:00
d65d6fbbac update 2023-09-29 17:49:05 +08:00
674009e394 update 2023-09-29 17:39:45 +08:00
d8e3cf00b4 update 2023-09-29 17:22:22 +08:00
8e84ea1e3a update 2023-09-29 16:08:42 +08:00
5221c5bc63 update 2023-09-28 14:41:24 +08:00
a5b5a5b942 update 2023-09-28 13:12:39 +08:00
52c806eeff update 2023-09-28 12:31:20 +08:00
0e4d81c7c8 update 2023-09-27 18:15:39 +08:00
4a03ad4227 update 2023-09-27 18:10:20 +08:00
8e1e8a9db5 update 2023-09-27 15:18:10 +08:00
9354b8c0bf update 2023-09-26 20:57:52 +08:00
7723ac97fb update 2023-09-26 17:59:08 +08:00
5240f826c5 update 2023-09-26 11:29:11 +08:00
36da8cd785 update 2023-09-26 11:21:24 +08:00
7716ab02a6 update 2023-09-25 18:10:24 +08:00
7a1776407f update 2023-09-23 15:55:29 +08:00
f88b330f8e update 2023-09-22 17:35:02 +08:00
67ef7f13aa update 2023-09-22 09:48:54 +08:00
23ec52ce6a update 2023-09-22 09:31:47 +08:00
5b7fdab1d9 update 2023-09-22 09:21:17 +08:00
4c1a96c03e update 2023-09-22 01:00:32 +08:00
ab4090ea9b update 2023-09-22 00:40:09 +08:00
8fb2ef723e update 2023-09-22 00:31:25 +08:00
77d9b4bde9 update 2023-09-22 00:11:58 +08:00
a96191b2af update 2023-09-21 18:29:09 +08:00
28e1799ca4 update 2023-09-20 18:38:15 +08:00
8337e278ff update 2023-09-19 23:41:56 +08:00
7ad8c969da update 2023-09-19 18:31:29 +08:00
66ae37a023 update 2023-09-19 00:31:49 +08:00
b27a88d261 update 2023-09-18 18:10:27 +08:00
257f3a7b3d update 2023-09-18 00:12:39 +08:00
4710379324 update 2023-09-17 21:34:02 +08:00
8fc74fe43b update 2023-09-17 20:36:33 +08:00
be194e7624 update 2023-09-15 19:11:55 +08:00
e6d9de34ea update 2023-09-15 01:28:03 +08:00
c47fa5ebc7 update 2023-09-14 18:50:36 +08:00
af74f35e43 update 2023-09-13 21:24:02 +08:00
3b61985cfe update 2023-09-13 18:12:58 +08:00
eb96cf5b47 update 2023-09-13 17:27:09 +08:00
d48ad16ae3 update 2023-09-13 16:08:54 +08:00
39fb4d1b1a update 2023-09-13 15:43:31 +08:00
674de3f881 update 2023-09-13 15:26:21 +08:00
0c2b3173eb update 2023-09-13 15:21:07 +08:00
b2471bcf0d update 2023-09-13 15:11:22 +08:00
79a7c97fe8 update 2023-09-12 22:55:42 +08:00
fd30819393 update 2023-09-12 18:45:15 +08:00
05040ec4a9 update 2023-09-11 18:10:50 +08:00
0297445218 update 2023-09-10 17:05:36 +08:00
3990c95489 update 2023-09-10 16:58:23 +08:00
618b21854f Compatible with static build 2023-09-09 20:09:20 +08:00
ef40e3b109 update 2023-09-09 10:19:47 +08:00
f2b67af58a update 2023-09-08 23:01:31 +08:00
c0f15060af update 2023-09-08 22:43:52 +08:00
24f3cb1027 update 2023-09-08 22:33:23 +08:00
4b01fcf2b4 update 2023-09-08 19:14:45 +08:00
752fe8cfba update 2023-09-08 17:39:10 +08:00
e1292966c1 update 2023-09-08 13:54:40 +08:00
249c294926 update 2023-09-08 01:12:20 +08:00
573898149a update 2023-09-08 00:21:28 +08:00
c92d807ec1 update 2023-09-07 18:07:23 +08:00
531bffdf1a update 2023-09-06 23:17:33 +08:00
db47a75f6b update 2023-09-06 22:52:48 +08:00
ad79480345 update 2023-09-06 18:07:51 +08:00
ed5956d824 update 2023-09-06 14:05:29 +08:00
ddee70cdca add breakPointDownload property 2023-09-06 00:22:37 +08:00
d6bbe3a5ec update 2023-09-05 18:38:16 +08:00
d93d6b7c26 update 2023-09-05 16:48:04 +08:00
54be482833 update 2023-09-04 22:49:50 +08:00
f60eaec07c Merge branch 'main' of https://github.com/zhuzichu520/FluentUI 2023-09-04 20:45:56 +08:00
f7b7d30a6f update 2023-09-04 18:37:55 +08:00
ba32c92133 update 2023-09-04 11:29:15 +08:00
08c4f78454 update 2023-09-01 18:38:21 +08:00
e29150ca52 update THIRD_PARTY_COPYRIGHT 2023-09-01 09:37:07 +08:00
1be9103412 update 2023-08-31 18:06:05 +08:00
8583427a49 Merge branch 'main' of https://github.com/zhuzichu520/FluentUI 2023-08-30 18:44:13 +08:00
94a96cf75e update 2023-08-30 18:44:07 +08:00
5b3834ed8f add FluStaggeredView 2023-08-30 17:18:49 +08:00
5fc7ae7e89 add FpsItem 2023-08-28 17:14:21 +08:00
82a3f85f10 fix #266 2023-08-27 18:22:52 +08:00
56a62f0b29 fix #264 2023-08-27 12:40:02 +08:00
e30db258ca fix #265 2023-08-27 11:24:48 +08:00
e2879f564c check update 2023-08-27 09:11:44 +08:00
db74f71e82 update 2023-08-26 17:27:52 +08:00
aedb89b34b update 2023-08-26 17:20:30 +08:00
2818b84860 update 2023-08-24 22:04:51 +08:00
ba565e1ee8 update 2023-08-24 21:43:16 +08:00
a1199a9e9c update 2023-08-24 16:02:41 +08:00
be5e8a4a88 Qt5.15.2 compatible 2023-08-24 15:50:37 +08:00
cb34c9e48d update 2023-08-23 20:54:19 +08:00
7fec01c2a4 update 2023-08-23 20:44:13 +08:00
2b484124eb fix #258 2023-08-23 20:38:01 +08:00
1c81ce299b fix #258 2023-08-23 20:36:09 +08:00
f913263de6 fix #259 2023-08-23 20:11:42 +08:00
d05c60c3d7 update 2023-08-23 17:47:27 +08:00
f058496eb3 fix #258 2023-08-23 16:13:12 +08:00
6b92372c59 fix #256 2023-08-22 22:27:05 +08:00
73933842cf fix #255 2023-08-22 18:19:40 +08:00
050c2e595f fix #254 2023-08-22 10:19:06 +08:00
05fd8f5b8d fix #254 2023-08-22 09:35:09 +08:00
12e81e631c update 2023-08-21 23:06:40 +08:00
bad1071bb4 update 2023-08-21 11:51:03 +08:00
997101f349 update 2023-08-19 01:40:54 +08:00
2b96f06fe0 update 2023-08-18 23:05:15 +08:00
6ea873f75c update 2023-08-18 22:58:26 +08:00
efd21a5f55 Merge pull request #248 from FeJQ/FluNavigationView-pr
补交漏掉的FluEditableText.qml
2023-08-18 20:13:00 +08:00
a7ff28466d 补提交漏掉的文件 2023-08-18 19:48:48 +08:00
64728632c7 update 2023-08-18 19:17:45 +08:00
a54a99bbe1 1.增加FluEditableText
2.Nav组件增加切换编辑功能
3.example的导航栏增加右键重命名演示
2023-08-18 18:18:46 +08:00
cb8b128598 fix #246 2023-08-18 16:55:49 +08:00
153090637b update 2023-08-18 12:45:16 +08:00
c0efd71d31 update 2023-08-18 11:46:02 +08:00
2ead64e9b5 update 2023-08-18 09:59:38 +08:00
fc99c19479 update 2023-08-18 09:30:56 +08:00
1e9bd0fd05 update 2023-08-17 23:03:00 +08:00
b47f2d12ad update 2023-08-17 22:06:26 +08:00
9bf6ed9d1d update 2023-08-17 19:51:36 +08:00
c0726d89f0 update 2023-08-17 19:09:56 +08:00
06c9b4e382 update 2023-08-17 17:14:31 +08:00
26669f76e0 update 2023-08-17 12:38:44 +08:00
1729b46e13 update 2023-08-17 12:26:57 +08:00
5661d46862 update 2023-08-16 23:36:18 +08:00
2d492ceb95 update 2023-08-16 23:25:52 +08:00
736c19c41e update 2023-08-16 23:02:14 +08:00
ce552012f3 update 2023-08-16 22:56:22 +08:00
0df4c6858b update 2023-08-16 22:23:58 +08:00
ec9a9a5074 update 2023-08-16 18:05:49 +08:00
1b72b840d6 update 2023-08-16 13:14:00 +08:00
79d29769e1 update 2023-08-15 16:59:55 +08:00
a9d0dd9017 update 2023-08-15 11:05:01 +08:00
0b6491e730 update 2023-08-14 18:10:37 +08:00
7fe71c892b update 2023-08-13 20:49:04 +08:00
0b17d03f23 update 2023-08-12 11:01:40 +08:00
855305f197 update 2023-08-11 22:47:36 +08:00
6fe3081d23 update 2023-08-11 14:31:23 +08:00
b1a2266c5e update 2023-08-10 20:05:38 +08:00
048abb5dbd update 2023-08-10 18:59:34 +08:00
991ea383e7 update 2023-08-10 18:29:43 +08:00
73518fb831 update 2023-08-10 16:22:43 +08:00
312aebae73 update 2023-08-10 16:08:27 +08:00
3c349da98f update 2023-08-08 21:59:18 +08:00
dba7332d89 update 2023-08-08 21:57:08 +08:00
3fefb08140 update 2023-08-08 21:33:16 +08:00
1c69d5daab update 2023-08-08 21:31:33 +08:00
ec76240aed update 2023-08-08 21:03:15 +08:00
0a967ca47b update 2023-08-08 20:21:32 +08:00
8dbbf4e547 update 2023-08-08 19:59:06 +08:00
ebad24e809 update 2023-08-08 15:44:10 +08:00
b7acae1470 update 2023-08-07 22:11:08 +08:00
f8340bdf59 update 2023-08-07 21:46:54 +08:00
e4fb9989d0 update 2023-08-07 18:18:04 +08:00
9bd98c68e4 Merge pull request #232 from FeJQ/FluNavigationView-pr
给FluPaneItemSeparator增加spacing和size属性
2023-08-04 12:05:15 +08:00
7cd9b7c6bc 给FluPaneItemSeparator增加spacing和size属性 2023-08-03 18:14:52 +08:00
dde817923c update 2023-07-28 16:22:15 +08:00
ceaae1276e update 2023-07-28 16:18:49 +08:00
29c57bcdc3 update 2023-07-28 16:08:58 +08:00
7ba60ee570 update 2023-07-27 18:13:50 +08:00
f531f5b138 update 2023-07-27 17:46:18 +08:00
4f27ff41b9 update 2023-07-26 22:06:55 +08:00
42f058ca69 update 2023-07-26 17:48:35 +08:00
502044ebd2 update 2023-07-26 11:02:33 +08:00
5d902dc66e update 2023-07-25 21:24:45 +08:00
b22e79148b update 2023-07-25 17:57:37 +08:00
7122407b0b update 2023-07-24 21:49:32 +08:00
be7b2dcc34 update 2023-07-24 18:23:26 +08:00
db805ef85d update 2023-07-24 16:48:45 +08:00
d0e283747e Merge pull request #214 from mentalfl0w/dev
examlple: Make the items in searchbox more readable.
2023-07-24 09:38:34 +08:00
2d8a05f310 examlple: Make the items in searchbox more readable. 2023-07-24 01:20:23 +08:00
2d855e1aaa update 2023-07-23 21:19:07 +08:00
56188cfa51 update 2023-07-23 21:06:46 +08:00
169ca17a6a update 2023-07-23 20:56:04 +08:00
e4908e409b Merge branch 'main' of https://github.com/zhuzichu520/FluentUI 2023-07-23 20:44:47 +08:00
f141af154a update 2023-07-23 20:44:43 +08:00
10da873701 Merge pull request #210 from mentalfl0w/dev
Fix the FolderDialog and macOS download bug.
2023-07-23 15:42:59 +08:00
c23c0b5f42 Fix the FolderDialog and macOS download bug.
1. fix the "FolderDialog is not a type" error in Qt 6.2.4 and below.
2. fix download error in macOS.
2023-07-22 12:27:55 +08:00
4d78262277 update 2023-07-21 18:58:09 +08:00
2b88634c2f Merge branch 'main' of https://github.com/zhuzichu520/FluentUI 2023-07-21 11:19:33 +08:00
59f9495f31 update 2023-07-21 11:19:30 +08:00
29329d10df update 2023-07-20 21:54:45 +08:00
d014997d52 update 2023-07-20 18:26:47 +08:00
98e0aafb44 update 2023-07-18 18:24:06 +08:00
4b3548563b update 2023-07-18 14:07:07 +08:00
47c84ed60e update 2023-07-17 11:05:14 +08:00
d5ca38dec2 update framelesshelper 2023-07-17 10:12:57 +08:00
cb50c31e1e update 2023-07-17 09:25:12 +08:00
561b4ec8c0 update 2023-07-15 00:20:33 +08:00
4df6800ea4 update 2023-07-14 23:56:08 +08:00
1ecc1bd569 update 2023-07-14 18:18:46 +08:00
0810572e27 update 2023-07-14 16:15:25 +08:00
5ac0ba7463 update 2023-07-13 12:18:38 +08:00
596457cf59 Merge branch 'main' of https://github.com/zhuzichu520/FluentUI 2023-07-13 10:21:13 +08:00
8595b2fdec update 2023-07-13 10:20:45 +08:00
2337680aaf Merge pull request #200 from mentalfl0w/dev
Add Svg module to resolve unsupported image format error.
2023-07-12 08:37:49 +08:00
ba06480436 Add Svg module to resolve unsupported image format error. 2023-07-11 23:38:36 +08:00
0d87dadc61 update 2023-07-11 17:16:21 +08:00
7290b98fdb update 2023-07-11 16:43:28 +08:00
78815224fe update 2023-07-11 10:46:57 +08:00
6275c161fe Merge pull request #195 from mentalfl0w/main
Fix the bug of static resources didn't imported by engine.
2023-07-10 21:37:40 +08:00
9f24cdaebd Fix the bug of static resources didn't imported by engine. 2023-07-10 19:09:50 +08:00
e2ff752ed9 Merge pull request #193 from mentalfl0w/main
Add Build static lib option and fix the bug of static lib build.
2023-07-10 09:18:55 +08:00
ea88707366 Add Build static lib option and fix the bug of static lib build. 2023-07-10 00:03:41 +08:00
112bb6e07a update 2023-07-07 17:58:00 +08:00
26ad581072 update 2023-07-07 16:56:29 +08:00
03771cd7c9 update 2023-07-07 16:04:17 +08:00
9223d5f937 update 2023-07-07 11:47:03 +08:00
a273aa4588 Merge branch 'main' of https://github.com/zhuzichu520/FluentUI 2023-07-07 09:04:58 +08:00
fbcb65f549 update 2023-07-07 09:04:43 +08:00
082fd79c51 update 2023-07-06 18:50:15 +08:00
80619f6974 update 2023-07-06 18:17:52 +08:00
ad4d077480 update 2023-07-05 21:34:08 +08:00
ff93a6204a update 2023-07-05 19:18:32 +08:00
5a7dfeea6e update 2023-07-04 22:47:55 +08:00
0240244bba update 2023-07-04 22:39:57 +08:00
887fd2c02b update 2023-07-04 22:38:56 +08:00
e625b91b08 update 2023-07-04 16:08:04 +08:00
a5cf6f734b updatre 2023-07-04 15:45:50 +08:00
414bc14996 updatre 2023-07-04 15:43:29 +08:00
7276eb5f2f update 2023-07-04 15:15:58 +08:00
b6c689e0ec update 2023-07-04 15:09:48 +08:00
a48bc51edc update 2023-07-03 21:25:26 +08:00
b2d0975ed7 update 2023-07-03 18:44:43 +08:00
7dea573069 update 2023-07-03 18:08:25 +08:00
0d4dd483da update 2023-07-03 11:50:26 +08:00
d1656cfb63 update 2023-07-01 11:37:58 +08:00
73cc5bccc8 update 2023-07-01 11:37:08 +08:00
9ff81251c8 update 2023-07-01 07:54:43 +08:00
74940665ae update 2023-06-30 22:55:03 +08:00
21ddc79f3f update 2023-06-30 22:50:44 +08:00
64bbae9266 update 2023-06-30 18:47:25 +08:00
bbb6fe9329 update 2023-06-30 17:39:58 +08:00
c42f3ef70f update 2023-06-30 17:22:27 +08:00
f13f1727af update 2023-06-30 12:08:57 +08:00
9f9e48659b update 2023-06-29 23:36:36 +08:00
294606d019 update 2023-06-29 22:30:15 +08:00
bfa5c93d40 update 2023-06-29 18:47:10 +08:00
9656b3dd95 update 2023-06-29 17:48:48 +08:00
8a52f143d7 update 2023-06-29 10:07:02 +08:00
dc3b1acaa5 update 2023-06-29 10:03:24 +08:00
1a8d06331f update 2023-06-28 18:12:33 +08:00
d09414db1b update 2023-06-28 18:07:39 +08:00
bf3006415b update 2023-06-28 13:16:21 +08:00
cdba8b7921 update 2023-06-28 13:15:33 +08:00
192c65a510 update 2023-06-28 13:13:39 +08:00
90943674b3 update 2023-06-28 12:12:15 +08:00
157dc9166b update 2023-06-28 09:45:47 +08:00
a7e8a5e4cf update 2023-06-28 02:28:34 +08:00
96071ac8d7 update 2023-06-27 22:14:27 +08:00
e25b944704 update 2023-06-27 21:14:20 +08:00
1566e3934e update 2023-06-27 21:02:57 +08:00
16e71f01b1 Merge pull request #172 from mentalfl0w/dev
Make the FluTableView readonly text copiable.
2023-06-27 20:47:21 +08:00
e54c161aa6 Make the FluTableView readonly text copiable. 2023-06-27 20:39:57 +08:00
2147965b00 update 2023-06-27 00:17:01 +08:00
3a940466d5 update 2023-06-27 00:00:41 +08:00
564b27cd02 update 2023-06-26 23:57:50 +08:00
4be2ad6ba0 Merge pull request #171 from mentalfl0w/dev
FluTableView bug fixed.
2023-06-26 23:41:14 +08:00
1d9f6f5eff FluTableView bug fixed. 2023-06-26 23:21:15 +08:00
0610f63f26 update 2023-06-26 19:59:28 +08:00
d741b3eb4f update 2023-06-26 18:20:01 +08:00
cb7d2097f2 update 2023-06-26 18:12:58 +08:00
dff77d3d4f update 2023-06-26 11:43:49 +08:00
6d0834c653 update 2023-06-25 23:39:23 +08:00
059a1b17cc update 2023-06-25 23:17:44 +08:00
e1096b8e22 update 2023-06-25 19:01:22 +08:00
cd577c5599 update 2023-06-25 11:44:13 +08:00
d43532986a update 2023-06-25 11:30:25 +08:00
4c9e576072 update 2023-06-25 10:13:50 +08:00
b254064e26 Merge pull request #168 from mentalfl0w/dev
Fix qt_standard_project_setup for Qt 6.2 and below.
2023-06-25 09:03:12 +08:00
ffd8072826 Fix qt_standard_project_setup for Qt 6.2 and below. 2023-06-24 21:57:00 +08:00
9a1db0b230 update 2023-06-24 11:56:32 +08:00
9786e69fc2 update 2023-06-24 10:27:28 +08:00
82be3b12e3 update 2023-06-21 17:17:25 +08:00
1c0f5acaf8 update 2023-06-21 16:12:07 +08:00
243f8aa248 update 2023-06-21 11:47:05 +08:00
cbb8c3122b update 2023-06-21 00:43:05 +08:00
9f2c58306c update 2023-06-20 19:18:18 +08:00
adc3558e02 update .gitignore 2023-06-20 19:02:18 +08:00
98d73eb6cb update 2023-06-20 18:32:10 +08:00
b442696f92 update 2023-06-20 18:02:15 +08:00
82f606dd65 update 2023-06-20 12:53:32 +08:00
4efb91084a update 2023-06-19 18:08:49 +08:00
103dbe9d56 update 2023-06-19 17:50:54 +08:00
b829fa572f update 2023-06-19 09:52:19 +08:00
d2c5cc779b update 2023-06-19 09:50:11 +08:00
5acf664492 Merge branch 'main' of https://github.com/zhuzichu520/FluentUI 2023-06-19 09:12:59 +08:00
75d226947f update 2023-06-18 23:54:39 +08:00
752ff3c4f2 update 2023-06-18 13:56:30 +08:00
e591c483d5 Merge branch 'main' of https://github.com/zhuzichu520/FluentUI 2023-06-16 17:17:25 +08:00
fdff068752 update 2023-06-16 17:17:21 +08:00
24f28d8945 update 2023-06-16 12:45:57 +08:00
ed51143e9b update 2023-06-16 12:25:50 +08:00
9d94bc65d5 Merge branch 'main' of https://github.com/zhuzichu520/FluentUI 2023-06-16 09:30:33 +08:00
7bfa9f0191 update 2023-06-16 09:30:21 +08:00
6db144c751 Update README.md 2023-06-15 15:58:56 +08:00
a574cd9230 update 2023-06-15 15:01:33 +08:00
8c45c125e6 update 2023-06-15 14:46:32 +08:00
aab4802d7e update 2023-06-15 07:39:45 +08:00
441c1ab03c update 2023-06-15 00:42:07 +08:00
91f4f508cc update 2023-06-15 00:21:54 +08:00
94f8047508 update 2023-06-14 19:29:23 +08:00
d926a84f72 update 2023-06-14 00:04:37 +08:00
c07011408c update 2023-06-13 23:57:52 +08:00
4f9ec6abf2 update 2023-06-13 22:24:22 +08:00
c3b3dc904e update 2023-06-13 22:00:15 +08:00
2a5acb45a1 update 2023-06-13 20:13:49 +08:00
d29580f8f2 update 2023-06-13 18:17:40 +08:00
fd0ddbf5aa update 2023-06-13 11:48:29 +08:00
ac602c5afa update 2023-06-13 10:26:14 +08:00
8dbfcfd994 Merge pull request #157 from mentalfl0w/dev
Fix FluNavigationView push function in Standard mode.
2023-06-13 09:20:58 +08:00
c5ce34cbc3 Fix FluNavigationView push function in Standard mode. 2023-06-12 22:41:58 +08:00
612 changed files with 97994 additions and 11747 deletions

View File

@ -0,0 +1,317 @@
if(__get_git_revision_description)
return()
endif()
set(__get_git_revision_description YES)
get_filename_component(_gitdescmoddir ${CMAKE_CURRENT_LIST_FILE} PATH)
function(_git_find_closest_git_dir _start_dir _git_dir_var)
set(cur_dir "${_start_dir}")
set(git_dir "${_start_dir}/.git")
while(NOT EXISTS "${git_dir}")
set(git_previous_parent "${cur_dir}")
get_filename_component(cur_dir ${cur_dir} DIRECTORY)
if(cur_dir STREQUAL git_previous_parent)
set(${_git_dir_var}
""
PARENT_SCOPE)
return()
endif()
set(git_dir "${cur_dir}/.git")
endwhile()
set(${_git_dir_var}
"${git_dir}"
PARENT_SCOPE)
endfunction()
function(get_git_head_revision _refspecvar _hashvar)
_git_find_closest_git_dir("${CMAKE_CURRENT_SOURCE_DIR}" GIT_DIR)
if("${ARGN}" STREQUAL "ALLOW_LOOKING_ABOVE_CMAKE_SOURCE_DIR")
set(ALLOW_LOOKING_ABOVE_CMAKE_SOURCE_DIR TRUE)
else()
set(ALLOW_LOOKING_ABOVE_CMAKE_SOURCE_DIR FALSE)
endif()
if(NOT "${GIT_DIR}" STREQUAL "")
file(RELATIVE_PATH _relative_to_source_dir "${CMAKE_SOURCE_DIR}"
"${GIT_DIR}")
if("${_relative_to_source_dir}" MATCHES "[.][.]" AND NOT ALLOW_LOOKING_ABOVE_CMAKE_SOURCE_DIR)
set(GIT_DIR "")
endif()
endif()
if("${GIT_DIR}" STREQUAL "")
set(${_refspecvar}
"GITDIR-NOTFOUND"
PARENT_SCOPE)
set(${_hashvar}
"GITDIR-NOTFOUND"
PARENT_SCOPE)
return()
endif()
if(NOT IS_DIRECTORY ${GIT_DIR})
execute_process(
COMMAND "${GIT_EXECUTABLE}" rev-parse
--show-superproject-working-tree
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
OUTPUT_VARIABLE out
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
if(NOT "${out}" STREQUAL "")
file(READ ${GIT_DIR} submodule)
string(REGEX REPLACE "gitdir: (.*)$" "\\1" GIT_DIR_RELATIVE
${submodule})
string(STRIP ${GIT_DIR_RELATIVE} GIT_DIR_RELATIVE)
get_filename_component(SUBMODULE_DIR ${GIT_DIR} PATH)
get_filename_component(GIT_DIR ${SUBMODULE_DIR}/${GIT_DIR_RELATIVE}
ABSOLUTE)
set(HEAD_SOURCE_FILE "${GIT_DIR}/HEAD")
else()
file(READ ${GIT_DIR} worktree_ref)
string(REGEX REPLACE "gitdir: (.*)$" "\\1" git_worktree_dir
${worktree_ref})
string(STRIP ${git_worktree_dir} git_worktree_dir)
_git_find_closest_git_dir("${git_worktree_dir}" GIT_DIR)
set(HEAD_SOURCE_FILE "${git_worktree_dir}/HEAD")
endif()
else()
set(HEAD_SOURCE_FILE "${GIT_DIR}/HEAD")
endif()
set(GIT_DATA "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/git-data")
if(NOT EXISTS "${GIT_DATA}")
file(MAKE_DIRECTORY "${GIT_DATA}")
endif()
if(NOT EXISTS "${HEAD_SOURCE_FILE}")
return()
endif()
set(HEAD_FILE "${GIT_DATA}/HEAD")
configure_file("${HEAD_SOURCE_FILE}" "${HEAD_FILE}" COPYONLY)
configure_file("${_gitdescmoddir}/GetGitRevisionDescription.cmake.in"
"${GIT_DATA}/grabRef.cmake" @ONLY)
include("${GIT_DATA}/grabRef.cmake")
set(${_refspecvar}
"${HEAD_REF}"
PARENT_SCOPE)
set(${_hashvar}
"${HEAD_HASH}"
PARENT_SCOPE)
endfunction()
function(git_latest_tag _var)
if(NOT GIT_FOUND)
find_package(Git QUIET)
endif()
if(NOT GIT_FOUND)
set(${_var}
"GIT-NOTFOUND"
PARENT_SCOPE)
return()
endif()
execute_process(
COMMAND "${GIT_EXECUTABLE}" describe --abbrev=0 --tag
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
RESULT_VARIABLE res
OUTPUT_VARIABLE out
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
if(NOT res EQUAL 0)
set(out "GIT-TAG-NOTFOUND")
endif()
set(${_var}
"${out}"
PARENT_SCOPE)
endfunction()
function(git_commit_counts _var)
if(NOT GIT_FOUND)
find_package(Git QUIET)
endif()
if(NOT GIT_FOUND)
set(${_var}
"GIT-NOTFOUND"
PARENT_SCOPE)
return()
endif()
execute_process(
COMMAND "${GIT_EXECUTABLE}" rev-list HEAD --count
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
RESULT_VARIABLE res
OUTPUT_VARIABLE out
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
if(NOT res EQUAL 0)
set(out "GIT-TAG-NOTFOUND")
endif()
set(${_var}
"${out}"
PARENT_SCOPE)
endfunction()
function(git_describe _var)
if(NOT GIT_FOUND)
find_package(Git QUIET)
endif()
get_git_head_revision(refspec hash ALLOW_LOOKING_ABOVE_CMAKE_SOURCE_DIR)
if(NOT GIT_FOUND)
set(${_var}
"GIT-NOTFOUND"
PARENT_SCOPE)
return()
endif()
if(NOT hash)
set(${_var}
"HEAD-HASH-NOTFOUND"
PARENT_SCOPE)
return()
endif()
execute_process(
COMMAND "${GIT_EXECUTABLE}" describe --tags --always ${hash} ${ARGN}
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
RESULT_VARIABLE res
OUTPUT_VARIABLE out
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
if(NOT res EQUAL 0)
set(out "${out}-${res}-NOTFOUND")
endif()
set(${_var}
"${out}"
PARENT_SCOPE)
endfunction()
function(git_release_version _var)
if(NOT GIT_FOUND)
find_package(Git QUIET)
endif()
get_git_head_revision(refspec hash ALLOW_LOOKING_ABOVE_CMAKE_SOURCE_DIR)
if(NOT GIT_FOUND)
set(${_var}
"GIT-NOTFOUND"
PARENT_SCOPE)
return()
endif()
if(NOT hash)
set(${_var}
"HEAD-HASH-NOTFOUND"
PARENT_SCOPE)
return()
endif()
execute_process(
COMMAND "${GIT_EXECUTABLE}" symbolic-ref --short -q HEAD
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
RESULT_VARIABLE res
OUTPUT_VARIABLE out
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
if(NOT res EQUAL 0)
set(out "${out}-${res}-NOTFOUND")
endif()
string(FIND ${out} "release/" found})
if(${out} MATCHES "^release/.+$")
string(REPLACE "release/" "" tmp_out ${out})
set(${_var} "${tmp_out}" PARENT_SCOPE)
else()
set(${_var} "" PARENT_SCOPE)
endif()
endfunction()
function(git_describe_working_tree _var)
if(NOT GIT_FOUND)
find_package(Git QUIET)
endif()
if(NOT GIT_FOUND)
set(${_var}
"GIT-NOTFOUND"
PARENT_SCOPE)
return()
endif()
execute_process(
COMMAND "${GIT_EXECUTABLE}" describe --dirty ${ARGN}
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
RESULT_VARIABLE res
OUTPUT_VARIABLE out
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
if(NOT res EQUAL 0)
set(out "${out}-${res}-NOTFOUND")
endif()
set(${_var}
"${out}"
PARENT_SCOPE)
endfunction()
function(git_get_exact_tag _var)
git_describe(out --exact-match ${ARGN})
set(${_var}
"${out}"
PARENT_SCOPE)
endfunction()
function(git_local_changes _var)
if(NOT GIT_FOUND)
find_package(Git QUIET)
endif()
get_git_head_revision(refspec hash)
if(NOT GIT_FOUND)
set(${_var}
"GIT-NOTFOUND"
PARENT_SCOPE)
return()
endif()
if(NOT hash)
set(${_var}
"HEAD-HASH-NOTFOUND"
PARENT_SCOPE)
return()
endif()
execute_process(
COMMAND "${GIT_EXECUTABLE}" diff-index --quiet HEAD --
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
RESULT_VARIABLE res
OUTPUT_VARIABLE out
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
if(res EQUAL 0)
set(${_var}
"CLEAN"
PARENT_SCOPE)
else()
set(${_var}
"DIRTY"
PARENT_SCOPE)
endif()
endfunction()
git_release_version(GIT_TAG)
git_get_exact_tag(GIT_EXACT_TAG)
if(GIT_TAG STREQUAL "")
git_latest_tag(GIT_TAG)
endif()
if(GIT_TAG STREQUAL "GIT-TAG-NOTFOUND")
set(GIT_TAG "1.0.0")
endif ()
git_describe(GIT_DESCRIBE)
git_commit_counts(GIT_COMMIT_COUNT)
_git_find_closest_git_dir("${CMAKE_CURRENT_SOURCE_DIR}" GIT_DIR)
if(NOT IS_DIRECTORY ${GIT_DIR})
message(STATUS "Current .git not exist")
set(GIT_COMMIT_COUNT "1")
set(GIT_DESCRIBE "1.0.0")
set(GIT_TAG "1.0.0")
else()
message(STATUS "Current .git exist")
endif()
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]+)" SEMVER_SPLITED "${GIT_SEMVER}")
set(MAJOR_VERSION ${CMAKE_MATCH_1})
set(MINOR_VERSION ${CMAKE_MATCH_2})
set(PATCH_VERSION ${CMAKE_MATCH_3})
MATH(EXPR VERSION_COUNTER "${MAJOR_VERSION} * 10000 + ${MINOR_VERSION} * 100 + ${PATCH_VERSION}")
message(STATUS "Current git tag: ${GIT_TAG}, commit count: ${GIT_COMMIT_COUNT}, describe: ${GIT_DESCRIBE}")
message(STATUS "Current semver: major: ${MAJOR_VERSION}, minor: ${MINOR_VERSION}, patch: ${PATCH_VERSION}, counter: ${VERSION_COUNTER}")

View File

@ -0,0 +1,21 @@
set(HEAD_HASH)
file(READ "@HEAD_FILE@" HEAD_CONTENTS LIMIT 1024)
string(STRIP "${HEAD_CONTENTS}" HEAD_CONTENTS)
if(HEAD_CONTENTS MATCHES "ref")
string(REPLACE "ref: " "" HEAD_REF "${HEAD_CONTENTS}")
if(EXISTS "@GIT_DIR@/${HEAD_REF}")
configure_file("@GIT_DIR@/${HEAD_REF}" "@GIT_DATA@/head-ref" COPYONLY)
else()
configure_file("@GIT_DIR@/packed-refs" "@GIT_DATA@/packed-refs" COPYONLY)
file(READ "@GIT_DATA@/packed-refs" PACKED_REFS)
if(${PACKED_REFS} MATCHES "([0-9a-z]*) ${HEAD_REF}")
set(HEAD_HASH "${CMAKE_MATCH_1}")
endif()
endif()
else()
configure_file("@GIT_DIR@/HEAD" "@GIT_DATA@/head-ref" COPYONLY)
endif()
if(NOT HEAD_HASH)
file(READ "@GIT_DATA@/head-ref" HEAD_HASH LIMIT 1024)
string(STRIP "${HEAD_HASH}" HEAD_HASH)
endif()

View File

@ -0,0 +1,52 @@
; 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
MinVersion = 6.0
[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

11
.cmake/Version.h.in Normal file
View File

@ -0,0 +1,11 @@
#ifndef VERSION_H
#define VERSION_H
#include <QtGlobal>
#define APPLICATION_FULL_VERSION "${GIT_SEMVER}.${GIT_COMMIT_COUNT}"
#define VERSION_COUNTER ${GIT_COMMIT_COUNT}
#define COMMIT_HASH "${GIT_DESCRIBE}"
#define APPLICATION_VERSION "${GIT_SEMVER}"
#endif // VERSION_H

34
.cmake/version_exe.rc.in Normal file
View File

@ -0,0 +1,34 @@
1 VERSIONINFO
FILEVERSION ${GIT_TAG_WITH_COMMA},${GIT_COMMIT_COUNT}
PRODUCTVERSION ${GIT_TAG_WITH_COMMA},${GIT_COMMIT_COUNT}
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x40004L
FILETYPE 0x2L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "080404b0"
BEGIN
VALUE "CompanyName", "ZhuZiChu"
VALUE "FileDescription", "${PROJECT_DESCRIPTION}"
VALUE "FileVersion", "${GIT_SEMVER}.${GIT_COMMIT_COUNT}"
VALUE "InternalName", "${PROJECT_NAME}.exe"
VALUE "LegalCopyright", "Copyright (C) 2023 ZhuZiChu. All rights reserved."
VALUE "OriginalFilename", "${PROJECT_NAME}.exe"
VALUE "ProductName", "${PROJECT_NAME}"
VALUE "ProductVersion", "${GIT_SEMVER}.0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x804, 1200
END
END
IDI_ICON1 ICON DISCARDABLE "${CMAKE_SOURCE_DIR}/example/favicon.ico"

View File

@ -21,8 +21,8 @@ jobs:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [macos-12]
qt_ver: [6.5.0]
os: [macos-latest]
qt_ver: [6.6.2]
qt_arch: [clang_64]
env:
targetName: example
@ -38,7 +38,7 @@ jobs:
version: ${{ matrix.qt_ver }}
cache: ${{steps.cache-qt.outputs.cache-hit}}
arch: ${{ matrix.qt_arch }}
modules: 'qt5compat qtmultimedia qtshadertools qtimageformats'
modules: 'qt5compat qtmultimedia qtshadertools qtimageformats qt3d'
- name: Set up Ninja
uses: seanmiddleditch/gha-setup-ninja@v3
@ -50,17 +50,19 @@ jobs:
cmake --version
mkdir 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/${{ matrix.qt_ver }}/macos -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_BUILD_TYPE=Release -GNinja ..
cmake --build . --target all --config Release --parallel
- name: package
run: |
# 先删除所有dSYM文件减少包的体积
sudo find /Users/runner/work/FluentUI/Qt/${{ matrix.qt_ver }}/macos/qml -name "*.dSYM" | xargs rm -r
# 拷贝依赖
macdeployqt bin/release/${targetName}.app -qmldir=. -verbose=1 -dmg
sudo macdeployqt bin/Release/${targetName}.app -qmldir=. -dmg
- uses: actions/upload-artifact@v2
with:
name: ${{ env.targetName }}_${{ matrix.os }}_${{matrix.qt_ver}}.zip
name: ${{ env.targetName }}_${{ matrix.os }}_${{matrix.qt_ver}}
path: bin/release/${{ env.targetName }}.app
- name: uploadRelease
@ -71,4 +73,4 @@ jobs:
file: bin/release/${{ env.targetName }}.dmg
asset_name: ${{ env.targetName }}_${{ github.ref_name }}_${{ matrix.os }}_Qt${{ matrix.qt_ver }}.dmg
tag: ${{ github.ref }}
overwrite: true
overwrite: true

View File

@ -22,8 +22,8 @@ jobs:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-20.04]
qt_ver: [6.5.0]
os: [ubuntu-latest]
qt_ver: [6.6.2]
qt_arch: [gcc_64]
env:
targetName: example
@ -39,7 +39,7 @@ jobs:
version: ${{ matrix.qt_ver }}
cache: ${{steps.cache-qt.outputs.cache-hit}}
arch: ${{ matrix.qt_arch }}
modules: 'qt5compat qtmultimedia qtshadertools qtimageformats'
modules: 'qt5compat qtmultimedia qtshadertools qtimageformats qt3d'
- name: Set up Ninja
uses: seanmiddleditch/gha-setup-ninja@v3
@ -49,13 +49,16 @@ jobs:
- name: ubuntu install GL library
run: sudo apt-get install -y libxcb-cursor0 libgl1-mesa-dev libxcb1-dev libgtk-3-dev libxkbcommon-x11-dev libxcb-icccm4-dev libxcb-image0-dev libxcb-keysyms1-dev libxcb-randr0-dev libxcb-shape0-dev libxcb-xfixes0-dev libxcb-xinerama0-dev libxcb-sync-dev libxcb-render-util0-dev libxcb-shm0-dev
- name: ubuntu install libfuse2
run: sudo apt install libfuse2
- name: build ubuntu
run: |
ninja --version
cmake --version
mkdir 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/${{ matrix.qt_ver }}/gcc_64 -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -DCMAKE_BUILD_TYPE=Release -GNinja ..
cmake --build . --target all --config Release --parallel
- name: install QT linux deploy
@ -71,7 +74,7 @@ jobs:
# make sure Qt plugin finds QML sources so it can deploy the imported files
export QML_SOURCES_PATHS=./
# 拷贝依赖
linuxdeploy-x86_64.AppImage --plugin=qt --output=appimage --create-desktop-file --icon-file=${targetName}.svg --executable=bin/release/${targetName} --appdir bin/release/
linuxdeploy-x86_64.AppImage --plugin=qt --output=appimage --create-desktop-file --icon-file=${targetName}.svg --executable=bin/Release/${targetName} --appdir bin/release/
mv ${{ env.targetName }}-*.AppImage ${{ env.targetName }}.AppImage
- uses: actions/upload-artifact@v2
@ -87,4 +90,4 @@ jobs:
file: ${{ env.targetName }}.AppImage
asset_name: ${{ env.targetName }}_${{ github.ref_name }}_${{ matrix.os }}_Qt${{ matrix.qt_ver }}.AppImage
tag: ${{ github.ref }}
overwrite: true
overwrite: true

View File

@ -18,12 +18,13 @@ on:
jobs:
build:
name: Build
runs-on: windows-2022
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [windows-latest]
include:
- qt_arch: win64_mingw
qt_ver: 6.5.0
qt_ver: 6.6.2
qt_tools: "tools_mingw,9.0.0-1-202203221220,qt.tools.win64_mingw900"
qt_tools_mingw_install: mingw900_64
env:
@ -34,6 +35,11 @@ jobs:
uses: actions/checkout@v3
with:
submodules: recursive
- name: Setup ninja
uses: seanmiddleditch/gha-setup-ninja@master
with:
version: 1.10.2
- name: Install Qt
uses: jurplel/install-qt-action@v3
@ -41,7 +47,7 @@ jobs:
version: ${{ matrix.qt_ver }}
arch: ${{ matrix.qt_arch }}
cache: ${{steps.cache-qt.outputs.cache-hit}}
modules: 'qt5compat qtmultimedia qtshadertools qtimageformats'
modules: 'qt5compat qtmultimedia qtshadertools qtimageformats qt3d'
- name: Qt6 environment configuration
if: ${{ startsWith( matrix.qt_ver, 6 ) }}
@ -62,7 +68,8 @@ jobs:
run: |
mkdir 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\${{ matrix.qt_ver }}\mingw_64 -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -DCMAKE_BUILD_TYPE=Release -GNinja ..
cmake --build . --target all --config Release --parallel
- name: package
@ -78,14 +85,20 @@ jobs:
- uses: actions/upload-artifact@v2
with:
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: ./package/InstallerScript.iss
- name: uploadRelease
if: startsWith(github.event.ref, 'refs/tags/')
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: ${{ steps.package.outputs.packageName }}.zip
asset_name: ${{ env.fileName }}_${{ github.ref_name }}_${{ matrix.qt_arch }}_Qt${{ matrix.qt_ver }}.zip
file: ./package/installer.exe
asset_name: ${{ env.fileName }}_${{ github.ref_name }}_${{ matrix.qt_arch }}_Qt${{ matrix.qt_ver }}.exe
tag: ${{ github.ref }}
overwrite: true
overwrite: true

91
.github/workflows/windows-qt5.yml vendored Normal file
View 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\${{ matrix.qt_ver }}\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: ./package/InstallerScript.iss
- name: uploadRelease
if: startsWith(github.event.ref, 'refs/tags/')
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: ./package/installer.exe
asset_name: ${{ env.fileName }}_${{ github.ref_name }}_${{ matrix.qt_arch }}_Qt${{ matrix.qt_ver }}.exe
tag: ${{ github.ref }}
overwrite: true

View File

@ -21,12 +21,12 @@ jobs:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [windows-2019]
os: [windows-latest]
include:
- qt_ver: 6.5.0
- qt_ver: 6.6.2
qt_arch: win64_msvc2019_64
msvc_arch: x64
qt_arch_install: msvc2019_64
qt_arch_install: msvc2019_64
env:
targetName: example.exe
fileName: example
@ -35,23 +35,29 @@ jobs:
uses: actions/checkout@v3
with:
submodules: recursive
- name: Setup ninja
uses: seanmiddleditch/gha-setup-ninja@master
with:
version: 1.10.2
- 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}}
modules: 'qt5compat qtmultimedia qtshadertools qtimageformats qtspeech'
modules: 'qt5compat qtmultimedia qtshadertools qtimageformats qtspeech qt3d'
- 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 }}
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" ${{ matrix.msvc_arch }}
ninja --version
mkdir 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\${{ matrix.qt_ver }}\msvc2019_64 -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%
@ -73,14 +79,20 @@ jobs:
- uses: actions/upload-artifact@v2
with:
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: ./package/InstallerScript.iss
- name: uploadRelease
if: startsWith(github.event.ref, 'refs/tags/')
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: ${{ steps.package.outputs.packageName }}.zip
asset_name: ${{ env.fileName }}_${{ github.ref_name }}_${{ matrix.qt_arch }}_Qt${{ matrix.qt_ver }}.zip
file: ./package/installer.exe
asset_name: ${{ env.fileName }}_${{ github.ref_name }}_${{ matrix.qt_arch }}_Qt${{ matrix.qt_ver }}.exe
tag: ${{ github.ref }}
overwrite: true
overwrite: true

8
.gitignore vendored
View File

@ -31,9 +31,13 @@ target_wrapper.*
# QtCreator CMake
CMakeLists.txt.user*
src/build-preset/plugins.qmltypes
bin
.DS_Store
build
cmake-build-*
.idea
.idea
package
example/Version.h
dist
*.qm

3
.gitmodules vendored
View File

@ -1,3 +0,0 @@
[submodule "framelesshelper"]
path = framelesshelper
url = https://github.com/zhuzichu520/framelesshelper.git

BIN
3rdparty/msvc/x86/libcrypto-1_1.dll vendored Normal file

Binary file not shown.

BIN
3rdparty/msvc/x86/libssl-1_1.dll vendored Normal file

Binary file not shown.

View File

@ -1,10 +1,36 @@
cmake_minimum_required(VERSION 3.20)
project(FluentUI VERSION 0.1 LANGUAGES CXX)
project(FluentUI VERSION 1.0)
if (MSVC)
#让Release也生成pdb文件
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /DEBUG /OPT:REF /OPT:ICF")
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /DEBUG /OPT:REF /OPT:ICF")
endif ()
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/.cmake/)
include(GetGitRevisionDescription)
option(FLUENTUI_BUILD_EXAMPLES "Build FluentUI demo applications." ON)
option(FLUENTUI_BUILD_STATIC_LIB "Build static library." OFF)
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core)
add_subdirectory(src)
add_subdirectory(example)
add_definitions(-DFRAMELESSHELPER_CORE_NO_DEBUG_OUTPUT)
add_definitions(-DFRAMELESSHELPER_QUICK_NO_DEBUG_OUTPUT)
add_subdirectory(framelesshelper)
#Release也支持日志打印代码位置
target_compile_definitions(fluentuiplugin
PRIVATE
QT_MESSAGELOGCONTEXT
)
if (FLUENTUI_BUILD_EXAMPLES)
add_subdirectory(example)
endif ()
message("------------------------ FluentUI ------------------------")
message("Build FluentUI demo applications.: ${FLUENTUI_BUILD_EXAMPLES}")
message("Build static library.: ${FLUENTUI_BUILD_STATIC_LIB}")
message("Path to FluentUI plugin.: ${FLUENTUI_QML_PLUGIN_DIRECTORY}")

View File

@ -6,7 +6,7 @@
QML FluentUI
</h1>
<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>
![win-badge] ![ubuntu-badge] ![macos-badge] ![release-badge] ![download-badge] ![download-latest]
@ -46,7 +46,7 @@ Use [Qt Online Installers](https://download.qt.io/archive/online_installers/) to
## ⚽ Get started
+ Download the [pre-built release](https://github.com/zhuzichu520/FluentUI/releases). (Please pecify your platform and compilers.)
+ Download the [pre-built release](https://github.com/zhuzichu520/FluentUI/releases). (Please specify your platform and compilers.)
+ run `example` program.
@ -115,5 +115,9 @@ View more [`here`](doc/md/all_components.md)!
This FluentUI library currently licensed under [MIT License](./License)
## Star History
[![Star History Chart](https://api.star-history.com/svg?repos=zhuzichu520/FluentUI&type=Date)](https://star-history.com/#zhuzichu520/FluentUI&Date)
## ⚡ Visitor count
![](https://profile-counter.glitch.me/zhuzichu520-FluentUI/count.svg)

347
THIRD_PARTY_COPYRIGHT.txt Normal file
View File

@ -0,0 +1,347 @@
This product use Third Party code for certain functions may include licensed under
terms that require meeting to display the following notices:
A text copy of this license is included with the download of
this FluentUI software. You may obtain a copy of the
source code from https://github.com/zhuzichu520/FluentUI
************************************************************************************
About Qt 6.5.0 Libraries Used in This Project:
This project, "FluentUI", utilizes the Qt 6.5.0 library.
Below is a list of the Qt modules used and their corresponding open-source licenses:
Qt Core - LGPL v3 / GPL v2 / Commercial License
Qt Quick - LGPL v3 / GPL v2 / Commercial License
Qt Quick Controls 2 - LGPL v3 / GPL v2 / Commercial License
Qt Gui - LGPL v3 / GPL v2 / Commercial License
Qt Multimedia - LGPL v3 / GPL v2 / Commercial License
Qt WebEngineQuick - LGPL v3 / GPL v3 / Commercial License
Qt Sql - LGPL v3 / GPL v2 / Commercial License
Qt Svg - LGPL v3 / GPL v2 / Commercial License
Qt Core5Compat - LGPL v3 / GPL v2 / Commercial License
Please note that the license information provided above is for reference only.
For the exact licensing, refer to the official Qt documentation and source code:
https://doc.qt.io/qt-6/licenses-used-in-qt.html
You can choose an appropriate license based on your requirements.
If you choose to use the LGPL or GPL licenses, please follow the relevant
open-source license regulations, such as releasing source code,
retaining copyright notices, etc.
We would like to thank the Qt project and its contributors for
providing powerful tools and support for this project.
For more information about the Qt project,
please visit the official Qt website (https://www.qt.io/).
************************************************************************************
QHotkey
Copyright (c) 2016, Felix Barz
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of QHotkey nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
************************************************************************************
framelesshelper
MIT License
Copyright (C) 2021-2023 by wangwenx190 (Yuhang Zhao)
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.
************************************************************************************
zxing-cpp
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "{}"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright {yyyy} {name of copyright owner}
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
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.

0
doc/preview/demo_content_dialog.png Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

0
doc/preview/demo_filledbtn.png Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

0
doc/preview/demo_icon.png Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB

0
doc/preview/demo_infobar.png Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 6.2 KiB

After

Width:  |  Height:  |  Size: 6.2 KiB

0
doc/preview/demo_large.png Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 192 KiB

After

Width:  |  Height:  |  Size: 192 KiB

0
doc/preview/demo_multiline_textbox.png Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 4.7 KiB

After

Width:  |  Height:  |  Size: 4.7 KiB

0
doc/preview/demo_progress_bar_ring.png Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

0
doc/preview/demo_radiobtn.png Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

0
doc/preview/demo_rectangle.png Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

0
doc/preview/demo_slider.png Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 997 B

After

Width:  |  Height:  |  Size: 997 B

0
doc/preview/demo_standardbtn.png Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

0
doc/preview/demo_textbox.png Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

0
doc/preview/demo_textbtn.png Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

0
doc/preview/demo_toggle_switch.png Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

0
doc/preview/demo_tooltip.png Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

0
doc/preview/demo_tree_view.png Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

0
doc/preview/qt_creator_project.png Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 61 KiB

After

Width:  |  Height:  |  Size: 61 KiB

View File

@ -1,104 +1,175 @@
cmake_minimum_required(VERSION 3.20)
project(example VERSION 0.1 LANGUAGES CXX)
project(example VERSION 1.0)
#配置通用编译
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
if(APPLE)
set(CMAKE_OSX_ARCHITECTURES "arm64;x86_64" CACHE STRING "" FORCE)
endif()
#判断FluentUI库类型
if (FLUENTUI_BUILD_STATIC_LIB)
add_definitions(-DFLUENTUI_BUILD_STATIC_LIB)
endif ()
#设置可执行文件输出目录
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin/debug)
else()
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin/release)
endif()
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin/${CMAKE_BUILD_TYPE})
#获取文件路径分隔符(解决执行命令的时候有些平台会报错)
file(TO_CMAKE_PATH "/" PATH_SEPARATOR)
if (APPLE)
set(APPLICATION_DIR_PATH ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${PROJECT_NAME}.app/Contents/MacOS)
else ()
set(APPLICATION_DIR_PATH ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
endif ()
#设置版本号
add_definitions(-DVERSION=1,3,3,0)
#导入Qt相关依赖包
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Quick Svg Network)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Quick Svg Network)
find_package(Qt6 REQUIRED COMPONENTS Quick REQUIRED)
#添加国际化脚本
find_program(QT_LUPDATE NAMES lupdate lupdate-qt6)
find_program(QT_LRELEASE NAMES lrelease lrelease-qt6)
file(GLOB TS_FILE_PATHS ${CMAKE_CURRENT_LIST_DIR}/ *.ts)
add_custom_target(Script-UpdateTranslations
COMMAND ${QT_LUPDATE} ${CMAKE_CURRENT_LIST_DIR} -ts ${PROJECT_NAME}_en_US.ts WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
COMMAND ${QT_LUPDATE} ${CMAKE_CURRENT_LIST_DIR} -ts ${PROJECT_NAME}_zh_CN.ts WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
COMMAND ${QT_LRELEASE} ${PROJECT_NAME}_en_US.ts WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
COMMAND ${QT_LRELEASE} ${PROJECT_NAME}_zh_CN.ts WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
COMMAND ${CMAKE_COMMAND} -E make_directory ${APPLICATION_DIR_PATH}/i18n
COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_NAME}_en_US.qm ${PROJECT_NAME}_zh_CN.qm ${APPLICATION_DIR_PATH}/i18n
SOURCES ${TS_FILE_PATHS}
)
##生成版本信息头文件
set(HEADER_FILE_VERSION_PATH ${CMAKE_SOURCE_DIR}/${PROJECT_NAME}/Version.h)
configure_file(
${CMAKE_SOURCE_DIR}/.cmake/Version.h.in
${HEADER_FILE_VERSION_PATH}
)
#遍历所有Cpp文件
file(GLOB_RECURSE CPP_FILES *.cpp *.h)
foreach(filepath ${CPP_FILES})
foreach (filepath ${CPP_FILES})
string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/" "" filename ${filepath})
list(APPEND sources_files ${filename})
endforeach(filepath)
endforeach (filepath)
#遍历所有qml文件
file(GLOB_RECURSE QML_PATHS *.qml)
foreach(filepath ${QML_PATHS})
string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/" "" filename ${filepath})
list(APPEND qml_files ${filename})
endforeach(filepath)
if (WIN32)
list(APPEND sources_files "src/app_dmp.h")
endif ()
#遍历所有资源文件
file(GLOB_RECURSE RES_PATHS *.png *.jpg *.svg *.ico *.ttf *.webp qmldir)
foreach(filepath ${RES_PATHS})
string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/" "" filename ${filepath})
list(APPEND resource_files ${filename})
endforeach(filepath)
#添加可执行文件
if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
qt_add_executable(example
${sources_files}
example.rc
#如果是Windows平台则生成rc文件还有inno setup脚本文件
set(EXAMPLE_VERSION_RC_PATH "")
if (WIN32)
set(EXAMPLE_VERSION_RC_PATH ${CMAKE_CURRENT_BINARY_DIR}/version_${PROJECT_NAME}.rc)
configure_file(
${CMAKE_SOURCE_DIR}/.cmake/version_exe.rc.in
${EXAMPLE_VERSION_RC_PATH}
)
else ()
qt_add_executable(example
${sources_files}
configure_file(
${CMAKE_SOURCE_DIR}/.cmake/InstallerScript.iss.in
${CMAKE_SOURCE_DIR}/package/InstallerScript.iss
)
endif ()
#复制动态库到可执行文件同级目录下
if(WIN32)
if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
set(DLLPATH ${CMAKE_SOURCE_DIR}/3rdparty/msvc/*.dll)
else()
set(DLLPATH ${CMAKE_SOURCE_DIR}/3rdparty/mingw/*.dll)
endif()
string(REPLACE "/" ${PATH_SEPARATOR} DLLPATH "${DLLPATH}")
file(GLOB DLL_FILES ${DLLPATH})
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
${DLL_FILES}
${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
)
endif()
#加快qrc编译
qt_add_big_resources(QRC_RESOURCES ${PROJECT_NAME}.qrc)
list(APPEND QRC_RESOURCES ${PROJECT_NAME}.qrc)
set_property(SOURCE ${PROJECT_NAME}.qrc PROPERTY SKIP_AUTORCC ON)
list(APPEND sources_files ${QRC_RESOURCES})
#添加qml模块
qt_add_qml_module(example
URI example
VERSION 1.0
QML_FILES ${qml_files}
RESOURCES ${resource_files}
#添加可执行文件
if (WIN32)
list(APPEND sources_files ${EXAMPLE_VERSION_RC_PATH})
endif ()
if (${QT_VERSION_MAJOR} GREATER_EQUAL 6)
qt_add_executable(${PROJECT_NAME}
MANUAL_FINALIZATION
${sources_files}
)
else ()
add_executable(${PROJECT_NAME}
${sources_files}
)
endif ()
add_dependencies(${PROJECT_NAME} Script-UpdateTranslations)
#复制程序运行所需要的动态库
if (WIN32)
if (MSVC)
if (CMAKE_SIZEOF_VOID_P EQUAL 4)
file(GLOB_RECURSE 3RDPARTY_DLL_DIR ${CMAKE_SOURCE_DIR}/3rdparty/msvc/x86/*.dll)
elseif (CMAKE_SIZEOF_VOID_P EQUAL 8)
file(GLOB_RECURSE 3RDPARTY_DLL_DIR ${CMAKE_SOURCE_DIR}/3rdparty/msvc/x64/*.dll)
endif ()
elseif (MINGW)
file(GLOB_RECURSE 3RDPARTY_DLL_DIR ${CMAKE_SOURCE_DIR}/3rdparty/mingw/*.dll)
endif ()
file(COPY ${3RDPARTY_DLL_DIR} DESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
endif ()
#复制FluentUI源码到运行目录下用于脚手架生成
file(MAKE_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/source/)
file(COPY ${CMAKE_SOURCE_DIR}/src/ DESTINATION ${APPLICATION_DIR_PATH}/source/)
#导入component头文件,不然通过QML_NAMED_ELEMENT生成的c++类会找不到头文件报错
target_include_directories(${PROJECT_NAME} PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/src/component
)
#如果是静态库则需要手动注册插件导入FluentUI.h头文件
if (FLUENTUI_BUILD_STATIC_LIB)
target_include_directories(${PROJECT_NAME} PRIVATE
${CMAKE_SOURCE_DIR}/src
)
endif ()
#设置属性
set_target_properties(example PROPERTIES
MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com
MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
MACOSX_BUNDLE TRUE
WIN32_EXECUTABLE TRUE
set_target_properties(${PROJECT_NAME} PROPERTIES
MACOSX_BUNDLE_GUI_IDENTIFIER my.${PROJECT_NAME}.com
MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
MACOSX_BUNDLE TRUE
WIN32_EXECUTABLE TRUE
)
#链接库
target_link_libraries(example PRIVATE
Qt6::Quick
fluentuiplugin
FramelessHelper::Core
FramelessHelper::Quick
#Release也支持日志打印代码位置
target_compile_definitions(${PROJECT_NAME}
PRIVATE
QT_MESSAGELOGCONTEXT
)
#安装
install(TARGETS example
BUNDLE DESTINATION .
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
#目标文件链接库
target_link_libraries(${PROJECT_NAME} PRIVATE
Qt${QT_VERSION_MAJOR}::Quick
Qt${QT_VERSION_MAJOR}::Svg
Qt${QT_VERSION_MAJOR}::Network
fluentuiplugin
)
#添加部署脚本
if (CMAKE_BUILD_TYPE MATCHES "Release")
if (APPLE)
find_program(QT_DEPLOY_QT NAMES macdeployqt)
add_custom_target(Script-DeployRelease
COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_SOURCE_DIR}/dist
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} ${CMAKE_SOURCE_DIR}/dist
COMMAND ${QT_DEPLOY_QT} ${CMAKE_SOURCE_DIR}/dist/${PROJECT_NAME}.app -qmldir=${CMAKE_CURRENT_LIST_DIR}
COMMENT "MacOs Deploying Qt Dependencies After Build........."
SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
endif ()
if (WIN32)
find_program(QT_DEPLOY_QT NAMES windeployqt)
add_custom_target(Script-DeployRelease
COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_SOURCE_DIR}/dist
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} ${CMAKE_SOURCE_DIR}/dist
COMMAND ${QT_DEPLOY_QT} --qmldir=${CMAKE_CURRENT_LIST_DIR} --plugindir ${CMAKE_SOURCE_DIR}/dist/plugins --no-translations --compiler-runtime ${CMAKE_SOURCE_DIR}/dist/${PROJECT_NAME}.exe
COMMENT "Windows Deploying Qt Dependencies After Build........."
SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
endif ()
endif ()

18
example/README.md Normal file
View File

@ -0,0 +1,18 @@
# FluentUI 脚手架开发说明
## 代码说明
文件编码格式请用utf-8不带bom代码中最好不要含有中文包括注释中文可能会改变文件格式导致编译失败还会出现乱码显示中文请用国际化c++中用tr函数qml中用qsTr函数
### 脚本说明
1. **Script-UpdateTranslations**
用于更新ts与qm文件当你的代码添加了tr或者qsTr函数后执行这个脚本会更新ts文件然后编写翻译后再执行这个脚本qm文件会更新生效
2. **Script-DeployRelease**
执行Qt的windeployqt或macdeployqt命令这个脚本只在windows与macos才有linux不支持

215
example/example.qrc Normal file
View File

@ -0,0 +1,215 @@
<RCC>
<qresource prefix="/example">
<file>res/svg/avatar_1.svg</file>
<file>res/svg/avatar_2.svg</file>
<file>res/svg/avatar_3.svg</file>
<file>res/svg/avatar_4.svg</file>
<file>res/svg/avatar_5.svg</file>
<file>res/svg/avatar_6.svg</file>
<file>res/svg/avatar_7.svg</file>
<file>res/svg/avatar_8.svg</file>
<file>res/svg/avatar_9.svg</file>
<file>res/svg/avatar_10.svg</file>
<file>res/svg/avatar_11.svg</file>
<file>res/svg/avatar_12.svg</file>
<file>res/image/banner_1.jpg</file>
<file>res/image/banner_2.jpg</file>
<file>res/image/banner_3.jpg</file>
<file>res/image/logo_openai.png</file>
<file>res/image/favicon.ico</file>
<file>res/image/bg_home_header.png</file>
<file>res/image/ic_home_github.png</file>
<file>res/image/control/Acrylic.png</file>
<file>res/image/control/AnimatedIcon.png</file>
<file>res/image/control/AnimatedVisualPlayer.png</file>
<file>res/image/control/AnimationInterop.png</file>
<file>res/image/control/AppBarButton.png</file>
<file>res/image/control/AppBarSeparator.png</file>
<file>res/image/control/AppBarToggleButton.png</file>
<file>res/image/control/AutomationProperties.png</file>
<file>res/image/control/AutoSuggestBox.png</file>
<file>res/image/control/Border.png</file>
<file>res/image/control/BreadcrumbBar.png</file>
<file>res/image/control/Button.png</file>
<file>res/image/control/CalendarDatePicker.png</file>
<file>res/image/control/CalendarView.png</file>
<file>res/image/control/Canvas.png</file>
<file>res/image/control/Checkbox.png</file>
<file>res/image/control/Clipboard.png</file>
<file>res/image/control/ColorPaletteResources.png</file>
<file>res/image/control/ColorPicker.png</file>
<file>res/image/control/ComboBox.png</file>
<file>res/image/control/CommandBar.png</file>
<file>res/image/control/CommandBarFlyout.png</file>
<file>res/image/control/CompactSizing.png</file>
<file>res/image/control/ConnectedAnimation.png</file>
<file>res/image/control/ContentDialog.png</file>
<file>res/image/control/CreateMultipleWindows.png</file>
<file>res/image/control/DataGrid.png</file>
<file>res/image/control/DatePicker.png</file>
<file>res/image/control/DropDownButton.png</file>
<file>res/image/control/EasingFunction.png</file>
<file>res/image/control/Expander.png</file>
<file>res/image/control/FilePicker.png</file>
<file>res/image/control/FlipView.png</file>
<file>res/image/control/Flyout.png</file>
<file>res/image/control/Grid.png</file>
<file>res/image/control/GridView.png</file>
<file>res/image/control/HyperlinkButton.png</file>
<file>res/image/control/IconElement.png</file>
<file>res/image/control/Image.png</file>
<file>res/image/control/ImplicitTransition.png</file>
<file>res/image/control/InfoBadge.png</file>
<file>res/image/control/InfoBar.png</file>
<file>res/image/control/InkCanvas.png</file>
<file>res/image/control/InkToolbar.png</file>
<file>res/image/control/InputValidation.png</file>
<file>res/image/control/ItemsRepeater.png</file>
<file>res/image/control/Line.png</file>
<file>res/image/control/ListBox.png</file>
<file>res/image/control/ListView.png</file>
<file>res/image/control/MediaPlayerElement.png</file>
<file>res/image/control/MenuBar.png</file>
<file>res/image/control/MenuFlyout.png</file>
<file>res/image/control/NavigationView.png</file>
<file>res/image/control/NumberBox.png</file>
<file>res/image/control/PageTransition.png</file>
<file>res/image/control/ParallaxView.png</file>
<file>res/image/control/PasswordBox.png</file>
<file>res/image/control/PersonPicture.png</file>
<file>res/image/control/PipsPager.png</file>
<file>res/image/control/Pivot.png</file>
<file>res/image/control/ProgressBar.png</file>
<file>res/image/control/ProgressRing.png</file>
<file>res/image/control/PullToRefresh.png</file>
<file>res/image/control/RadialGradientBrush.png</file>
<file>res/image/control/RadioButton.png</file>
<file>res/image/control/RadioButtons.png</file>
<file>res/image/control/RatingControl.png</file>
<file>res/image/control/RelativePanel.png</file>
<file>res/image/control/RepeatButton.png</file>
<file>res/image/control/RevealFocus.png</file>
<file>res/image/control/RichEditBox.png</file>
<file>res/image/control/RichTextBlock.png</file>
<file>res/image/control/ScrollViewer.png</file>
<file>res/image/control/SemanticZoom.png</file>
<file>res/image/control/Shape.png</file>
<file>res/image/control/Slider.png</file>
<file>res/image/control/Sound.png</file>
<file>res/image/control/SplitButton.png</file>
<file>res/image/control/SplitView.png</file>
<file>res/image/control/StackPanel.png</file>
<file>res/image/control/StandardUICommand.png</file>
<file>res/image/control/SwipeControl.png</file>
<file>res/image/control/TabView.png</file>
<file>res/image/control/TeachingTip.png</file>
<file>res/image/control/TextBlock.png</file>
<file>res/image/control/TextBox.png</file>
<file>res/image/control/ThemeTransition.png</file>
<file>res/image/control/TimePicker.png</file>
<file>res/image/control/TitleBar.png</file>
<file>res/image/control/ToggleButton.png</file>
<file>res/image/control/ToggleSplitButton.png</file>
<file>res/image/control/ToggleSwitch.png</file>
<file>res/image/control/ToolTip.png</file>
<file>res/image/control/TreeView.png</file>
<file>res/image/control/VariableSizedWrapGrid.png</file>
<file>res/image/control/Viewbox.png</file>
<file>res/image/control/WebView.png</file>
<file>res/image/control/XamlUICommand.png</file>
<file>res/svg/home.svg</file>
<file>res/svg/home_dark.svg</file>
<file>res/image/qrcode_wx.jpg</file>
<file>res/image/qrcode_zfb.jpg</file>
<file>qml/App.qml</file>
<file>qml/component/CodeExpander.qml</file>
<file>qml/global/ItemsFooter.qml</file>
<file>qml/global/ItemsOriginal.qml</file>
<file>qml/global/qmldir</file>
<file>qml/page/T_Acrylic.qml</file>
<file>qml/page/T_Badge.qml</file>
<file>qml/page/T_BreadcrumbBar.qml</file>
<file>qml/page/T_Buttons.qml</file>
<file>qml/page/T_CalendarPicker.qml</file>
<file>qml/page/T_Captcha.qml</file>
<file>qml/page/T_Carousel.qml</file>
<file>qml/page/T_CheckBox.qml</file>
<file>qml/page/T_ColorPicker.qml</file>
<file>qml/page/T_ComboBox.qml</file>
<file>qml/page/T_DatePicker.qml</file>
<file>qml/page/T_Dialog.qml</file>
<file>qml/page/T_Expander.qml</file>
<file>qml/page/T_FlipView.qml</file>
<file>qml/page/T_Home.qml</file>
<file>qml/page/T_Image.qml</file>
<file>qml/page/T_InfoBar.qml</file>
<file>qml/page/T_Menu.qml</file>
<file>qml/page/T_MultiWindow.qml</file>
<file>qml/page/T_Pagination.qml</file>
<file>qml/page/T_Pivot.qml</file>
<file>qml/page/T_Progress.qml</file>
<file>qml/page/T_QRCode.qml</file>
<file>qml/page/T_RadioButton.qml</file>
<file>qml/page/T_RatingControl.qml</file>
<file>qml/page/T_Rectangle.qml</file>
<file>qml/page/T_RemoteLoader.qml</file>
<file>qml/page/T_Settings.qml</file>
<file>qml/page/T_Slider.qml</file>
<file>qml/page/T_StatusLayout.qml</file>
<file>qml/page/T_TableView.qml</file>
<file>qml/page/T_TabView.qml</file>
<file>qml/page/T_Text.qml</file>
<file>qml/page/T_TextBox.qml</file>
<file>qml/page/T_Theme.qml</file>
<file>qml/page/T_Timeline.qml</file>
<file>qml/page/T_TimePicker.qml</file>
<file>qml/page/T_ToggleSwitch.qml</file>
<file>qml/page/T_Tooltip.qml</file>
<file>qml/page/T_Tour.qml</file>
<file>qml/page/T_TreeView.qml</file>
<file>qml/page/T_Typography.qml</file>
<file>qml/page/T_Watermark.qml</file>
<file>qml/window/AboutWindow.qml</file>
<file>qml/window/HotloadWindow.qml</file>
<file>qml/window/LoginWindow.qml</file>
<file>qml/window/MainWindow.qml</file>
<file>qml/window/SingleInstanceWindow.qml</file>
<file>qml/window/SingleTaskWindow.qml</file>
<file>qml/window/StandardWindow.qml</file>
<file>res/image/image_1.jpg</file>
<file>qml/window/PageWindow.qml</file>
<file>qml/page/T_StaggeredLayout.qml</file>
<file>qml/page/T_Clip.qml</file>
<file>qml/page/T_Network.qml</file>
<file>qml/page/T_ShortcutPicker.qml</file>
<file>qml/chart/T_BarChart.qml</file>
<file>qml/chart/T_LineChart.qml</file>
<file>qml/chart/T_PieChart.qml</file>
<file>qml/chart/T_RadarChart.qml</file>
<file>qml/chart/T_ScatterChart.qml</file>
<file>qml/chart/T_BubbleChart.qml</file>
<file>qml/chart/T_PolarAreaChart.qml</file>
<file>res/image/ic_crash.png</file>
<file>qml/window/CrashWindow.qml</file>
<file>qml/page/T_SplitLayout.qml</file>
<file>res/template/CMakeLists.txt.in</file>
<file>res/template/src/App.qml.in</file>
<file>res/template/src/CMakeLists.txt.in</file>
<file>res/template/src/en_US.ts.in</file>
<file>res/template/src/logo.ico.in</file>
<file>res/template/src/main.cpp.in</file>
<file>res/template/src/main.qml.in</file>
<file>res/template/src/qml.qrc.in</file>
<file>res/template/src/zh_CN.ts.in</file>
<file>res/template/src/README.md.in</file>
<file>qml/global/GlobalModel.qml</file>
<file>qml/page/T_Sheet.qml</file>
<file>qml/page/T_GroupBox.qml</file>
<file>res/image/bg_scenic.jpg</file>
<file>qml/window/FluentInitializrWindow.qml</file>
<file>qml/page/T_OpenGL.qml</file>
<file>qml/page/T_Icons.qml</file>
<file>qml/window/HotkeyWindow.qml</file>
</qresource>
<qresource prefix="/"/>
</RCC>

View File

@ -1,42 +0,0 @@
#include <windows.h>
IDI_ICON1 ICON "favicon.ico"
#define STR(x) #x
#define VER_JOIN(a,b,c,d) STR(a.b.c.d)
#define VER_JOIN_(x) VER_JOIN x
#define VER_STR VER_JOIN_((VERSION))
VS_VERSION_INFO VERSIONINFO
FILEVERSION VERSION
PRODUCTVERSION VERSION
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS VS_FF_DEBUG
#else
FILEFLAGS 0x0L
#endif
FILEOS VOS_NT_WINDOWS32
FILETYPE VFT_APP
FILESUBTYPE VFT2_UNKNOWN
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904b0"
BEGIN
VALUE "Comments", "Built by the FluentUI."
VALUE "CompanyName", "zhuzichu"
VALUE "FileDescription", "example"
VALUE "FileVersion", VER_STR
VALUE "InternalName", ""
VALUE "LegalCopyright", "Copyright (C) 2023"
VALUE "OriginalFilename", ""
VALUE "ProductName", "example"
VALUE "ProductVersion", VER_STR
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1200
END
END

2474
example/example_en_US.ts Normal file

File diff suppressed because it is too large Load Diff

2644
example/example_zh_CN.ts Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,24 +1,125 @@
import QtQuick
import QtQuick.Window
import QtQuick.Controls
import QtQuick.Layouts
import FluentUI
import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15
import QtQuick.Layouts 1.15
import FluentUI 1.0
Window {
id:app
FluLauncher {
id: app
Connections{
target: FluTheme
function onDarkModeChanged(){
SettingsHelper.saveDarkMode(FluTheme.darkMode)
}
}
Connections{
target: FluApp
function onUseSystemAppBarChanged(){
SettingsHelper.saveUseSystemAppBar(FluApp.useSystemAppBar)
}
}
Connections{
target: TranslateHelper
function onCurrentChanged(){
SettingsHelper.saveLanguage(TranslateHelper.current)
}
}
Component.onCompleted: {
FluApp.init(app)
FluTheme.darkMode = FluDarkMode.System
FluApp.routes = {
Network.openLog = false
Network.setInterceptor(function(param){
param.addHeader("Token","000000000000000000000")
})
FluApp.init(app,Qt.locale(TranslateHelper.current))
FluApp.windowIcon = "qrc:/example/res/image/favicon.ico"
FluApp.useSystemAppBar = SettingsHelper.getUseSystemAppBar()
FluTheme.darkMode = SettingsHelper.getDarkMode()
FluTheme.animationEnabled = true
FluRouter.routes = {
"/":"qrc:/example/qml/window/MainWindow.qml",
"/about":"qrc:/example/qml/window/AboutWindow.qml",
"/login":"qrc:/example/qml/window/LoginWindow.qml",
"/media":"qrc:/example/qml/window/MediaWindow.qml",
"/hotload":"qrc:/example/qml/window/HotloadWindow.qml",
"/crash":"qrc:/example/qml/window/CrashWindow.qml",
"/singleTaskWindow":"qrc:/example/qml/window/SingleTaskWindow.qml",
"/standardWindow":"qrc:/example/qml/window/StandardWindow.qml",
"/singleInstanceWindow":"qrc:/example/qml/window/SingleInstanceWindow.qml"
"/singleInstanceWindow":"qrc:/example/qml/window/SingleInstanceWindow.qml",
"/pageWindow":"qrc:/example/qml/window/PageWindow.qml",
"/hotkey":"qrc:/example/qml/window/HotkeyWindow.qml"
}
var args = Qt.application.arguments
if(args.length>=2 && args[1].startsWith("-crashed=")){
FluRouter.navigate("/crash",{crashFilePath:args[1].replace("-crashed=","")})
}else{
FluRouter.navigate("/")
}
FluApp.initialRoute = "/"
FluApp.run()
}
property alias hotkeys: object_hotkey
FluObject{
id: object_hotkey
FluHotkey{
name: qsTr("Quit")
sequence: "Ctrl+Alt+Q"
onActivated: {
FluRouter.exit()
}
}
FluHotkey{
name: qsTr("Test1")
sequence: "Alt+A"
onActivated: {
FluRouter.navigate("/hotkey",{sequence:sequence})
}
}
FluHotkey{
name: qsTr("Test2")
sequence: "Alt+B"
onActivated: {
FluRouter.navigate("/hotkey",{sequence:sequence})
}
}
FluHotkey{
name: qsTr("Test3")
sequence: "Alt+C"
onActivated: {
FluRouter.navigate("/hotkey",{sequence:sequence})
}
}
FluHotkey{
name: qsTr("Test4")
sequence: "Alt+D"
onActivated: {
FluRouter.navigate("/hotkey",{sequence:sequence})
}
}
FluHotkey{
name: qsTr("Test5")
sequence: "Alt+E"
onActivated: {
FluRouter.navigate("/hotkey",{sequence:sequence})
}
}
FluHotkey{
name: qsTr("Test6")
sequence: "Alt+F"
onActivated: {
FluRouter.navigate("/hotkey",{sequence:sequence})
}
}
FluHotkey{
name: qsTr("Test7")
sequence: "Alt+G"
onActivated: {
FluRouter.navigate("/hotkey",{sequence:sequence})
}
}
FluHotkey{
name: qsTr("Test8")
sequence: "Alt+H"
onActivated: {
FluRouter.navigate("/hotkey",{sequence:sequence})
}
}
}
}

View File

@ -0,0 +1,132 @@
import QtQuick 2.15
import QtQuick.Layouts 1.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15
import FluentUI 1.0
import "../component"
FluScrollablePage{
title: qsTr("Bar Chart")
FluFrame{
Layout.preferredWidth: 500
Layout.preferredHeight: 370
padding: 10
Layout.topMargin: 20
FluChart{
anchors.fill: parent
chartType: 'bar'
chartData: { return {
labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'],
datasets: [{
label: 'My First Dataset',
data: [65, 59, 80, 81, 56, 55, 40],
backgroundColor: [
'rgba(255, 99, 132, 0.2)',
'rgba(255, 159, 64, 0.2)',
'rgba(255, 205, 86, 0.2)',
'rgba(75, 192, 192, 0.2)',
'rgba(54, 162, 235, 0.2)',
'rgba(153, 102, 255, 0.2)',
'rgba(201, 203, 207, 0.2)'
],
borderColor: [
'rgb(255, 99, 132)',
'rgb(255, 159, 64)',
'rgb(255, 205, 86)',
'rgb(75, 192, 192)',
'rgb(54, 162, 235)',
'rgb(153, 102, 255)',
'rgb(201, 203, 207)'
],
borderWidth: 1
}]
}
}
chartOptions: { return {
maintainAspectRatio: false,
title: {
display: true,
text: 'Chart.js Bar Chart - Stacked'
},
tooltips: {
mode: 'index',
intersect: false
},
responsive: true,
scales: {
xAxes: [{
stacked: true,
}],
yAxes: [{
stacked: true
}]
}
}
}
}
}
FluFrame{
Layout.preferredWidth: 500
Layout.preferredHeight: 370
padding: 10
Layout.topMargin: 20
FluChart{
anchors.fill: parent
chartType: 'horizontalBar'
chartData: { return {
labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'],
datasets: [{
label: 'My First Dataset',
data: [65, 59, 80, 81, 56, 55, 40],
backgroundColor: [
'rgba(255, 99, 132, 0.2)',
'rgba(255, 159, 64, 0.2)',
'rgba(255, 205, 86, 0.2)',
'rgba(75, 192, 192, 0.2)',
'rgba(54, 162, 235, 0.2)',
'rgba(153, 102, 255, 0.2)',
'rgba(201, 203, 207, 0.2)'
],
borderColor: [
'rgb(255, 99, 132)',
'rgb(255, 159, 64)',
'rgb(255, 205, 86)',
'rgb(75, 192, 192)',
'rgb(54, 162, 235)',
'rgb(153, 102, 255)',
'rgb(201, 203, 207)'
],
borderWidth: 1
}]
}
}
chartOptions: { return {
maintainAspectRatio: false,
title: {
display: true,
text: 'Chart.js HorizontalBar Chart - Stacked'
},
tooltips: {
mode: 'index',
intersect: false
},
responsive: true,
scales: {
xAxes: [{
stacked: true,
}],
yAxes: [{
stacked: true
}]
}
}
}
}
}
}

View File

@ -0,0 +1,74 @@
import QtQuick 2.15
import QtQuick.Layouts 1.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15
import FluentUI 1.0
import "../component"
FluScrollablePage{
title: qsTr("Bubble Chart")
function randomScalingFactor() {
return Math.random().toFixed(1);
}
FluFrame{
Layout.preferredWidth: 500
Layout.preferredHeight: 370
padding: 10
Layout.topMargin: 20
FluChart{
anchors.fill: parent
chartType: 'bubble'
chartData: {
return {
datasets: [{
label: 'First Dataset',
data: [{
x: 20,
y: 30,
r: 15
}, {
x: 12,
y: 70,
r: 20
}, {
x: 11,
y: 28,
r: 8
}, {
x: 9,
y: 28,
r: 10
}, {
x: 43,
y: 7,
r: 14
}, {
x: 22,
y: 22,
r: 12
}, {
x: 40,
y: 10,
r: 10
}],
backgroundColor: 'rgb(255, 99, 132)'
}]
}}
chartOptions: {return {
maintainAspectRatio: false,
responsive: true,
hoverMode: 'nearest',
intersect: true,
title: {
display: true,
text: 'Chart.js Bubble Chart - Multi Axis'
}
}
}
}
}
}

View File

@ -0,0 +1,63 @@
import QtQuick 2.15
import QtQuick.Layouts 1.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15
import FluentUI 1.0
import "../component"
FluScrollablePage{
id: root
title: qsTr("Line Chart")
property var data : []
FluFrame{
Layout.preferredWidth: 500
Layout.preferredHeight: 370
padding: 10
Layout.topMargin: 20
FluChart{
id: chart
anchors.fill: parent
chartType: 'line'
chartData: { return {
labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'],
datasets: [{
label: 'My First Dataset',
data: root.data,
fill: false,
borderColor: 'rgb(75, 192, 192)',
tension: 0.1
}]
}
}
chartOptions: { return {
maintainAspectRatio: false,
title: {
display: true,
text: 'Chart.js Line Chart - Stacked'
},
tooltips: {
mode: 'index',
intersect: false
}
}
}
}
Timer{
id: timer
interval: 300
repeat: true
onTriggered: {
root.data.push(Math.random()*100)
if(root.data.length>7){
root.data.shift()
}
chart.animateToNewData()
}
}
Component.onCompleted: {
timer.restart()
}
}
}

View File

@ -0,0 +1,93 @@
import QtQuick 2.15
import QtQuick.Layouts 1.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15
import FluentUI 1.0
import "../component"
FluScrollablePage{
title: qsTr("Pie Chart")
FluFrame{
Layout.preferredWidth: 500
Layout.preferredHeight: 370
padding: 10
Layout.topMargin: 20
FluChart{
anchors.fill: parent
chartType: "doughnut"
chartData: { return {
labels: [
'Red',
'Blue',
'Yellow'
],
datasets: [{
label: 'My First Dataset',
data: [300, 50, 100],
backgroundColor: [
'rgb(255, 99, 132)',
'rgb(54, 162, 235)',
'rgb(255, 205, 86)'
],
hoverOffset: 4
}]
}
}
chartOptions: { return {
maintainAspectRatio: false,
title: {
display: true,
text: 'Chart.js Doughnut Chart - Stacked'
},
tooltips: {
mode: 'index',
intersect: false
}
}
}
}
}
FluFrame{
Layout.preferredWidth: 500
Layout.preferredHeight: 370
padding: 10
Layout.topMargin: 20
FluChart{
anchors.fill: parent
chartType: "pie"
chartData: { return {
labels: [
'Red',
'Blue',
'Yellow'
],
datasets: [{
label: 'My First Dataset',
data: [300, 50, 100],
backgroundColor: [
'rgb(255, 99, 132)',
'rgb(54, 162, 235)',
'rgb(255, 205, 86)'
],
hoverOffset: 4
}]
}
}
chartOptions: { return {
maintainAspectRatio: false,
title: {
display: true,
text: 'Chart.js Pie Chart - Stacked'
},
tooltips: {
mode: 'index',
intersect: false
}
}
}
}
}
}

View File

@ -0,0 +1,57 @@
import QtQuick 2.15
import QtQuick.Layouts 1.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15
import FluentUI 1.0
import "../component"
FluScrollablePage{
title: qsTr("Polar Area Chart")
FluFrame{
Layout.preferredWidth: 500
Layout.preferredHeight: 370
padding: 10
Layout.topMargin: 20
FluChart{
anchors.fill: parent
chartType: 'polarArea'
chartData: { return {
labels: [
'Red',
'Green',
'Yellow',
'Grey',
'Blue'
],
datasets: [{
label: 'My First Dataset',
data: [11, 16, 7, 3, 14],
backgroundColor: [
'rgb(255, 99, 132)',
'rgb(75, 192, 192)',
'rgb(255, 205, 86)',
'rgb(201, 203, 207)',
'rgb(54, 162, 235)'
]
}]
}
}
chartOptions: { return {
maintainAspectRatio: false,
title: {
display: true,
text: 'Chart.js PolarArea Chart - Stacked'
},
tooltips: {
mode: 'index',
intersect: false
}
}
}
}
}
}

View File

@ -0,0 +1,74 @@
import QtQuick 2.15
import QtQuick.Layouts 1.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15
import FluentUI 1.0
import "../component"
FluScrollablePage{
title: qsTr("Radar Chart")
FluFrame{
Layout.preferredWidth: 500
Layout.preferredHeight: 370
padding: 10
Layout.topMargin: 20
FluChart{
anchors.fill: parent
chartType: 'radar'
chartData: { return {
labels: [
'Eating',
'Drinking',
'Sleeping',
'Designing',
'Coding',
'Cycling',
'Running'
],
datasets:
[{
label: 'My First Dataset',
data: [65, 59, 90, 81, 56, 55, 40],
fill: true,
backgroundColor: 'rgba(255, 99, 132, 0.2)',
borderColor: 'rgb(255, 99, 132)',
pointBackgroundColor: 'rgb(255, 99, 132)',
pointBorderColor: '#fff',
pointHoverBackgroundColor: '#fff',
pointHoverBorderColor: 'rgb(255, 99, 132)'
}, {
label: 'My Second Dataset',
data: [28, 48, 40, 19, 96, 27, 100],
fill: true,
backgroundColor: 'rgba(54, 162, 235, 0.2)',
borderColor: 'rgb(54, 162, 235)',
pointBackgroundColor: 'rgb(54, 162, 235)',
pointBorderColor: '#fff',
pointHoverBackgroundColor: '#fff',
pointHoverBorderColor: 'rgb(54, 162, 235)'
}]
}
}
chartOptions: { return {
maintainAspectRatio: false,
title: {
display: true,
text: 'Chart.js Radar Chart - Stacked'
},
tooltips: {
mode: 'index',
intersect: false
},
elements: {
line: {
borderWidth: 3
}
}
}
}
}
}
}

View File

@ -0,0 +1,122 @@
import QtQuick 2.15
import QtQuick.Layouts 1.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15
import FluentUI 1.0
import "../component"
FluScrollablePage{
title: qsTr("Scatter Chart")
function randomScalingFactor() {
return Math.random().toFixed(1);
}
FluFrame{
Layout.preferredWidth: 500
Layout.preferredHeight: 370
padding: 10
Layout.topMargin: 20
FluChart{
anchors.fill: parent
chartType: 'scatter'
chartData: {
return {
datasets: [{
label: 'My First dataset',
xAxisID: 'x-axis-1',
yAxisID: 'y-axis-1',
borderColor: '#ff5555',
backgroundColor: 'rgba(255,192,192,0.3)',
data: [{
x: randomScalingFactor(),
y: randomScalingFactor(),
}, {
x: randomScalingFactor(),
y: randomScalingFactor(),
}, {
x: randomScalingFactor(),
y: randomScalingFactor(),
}, {
x: randomScalingFactor(),
y: randomScalingFactor(),
}, {
x: randomScalingFactor(),
y: randomScalingFactor(),
}, {
x: randomScalingFactor(),
y: randomScalingFactor(),
}, {
x: randomScalingFactor(),
y: randomScalingFactor(),
}]
}, {
label: 'My Second dataset',
xAxisID: 'x-axis-1',
yAxisID: 'y-axis-2',
borderColor: '#5555ff',
backgroundColor: 'rgba(192,192,255,0.3)',
data: [{
x: randomScalingFactor(),
y: randomScalingFactor(),
}, {
x: randomScalingFactor(),
y: randomScalingFactor(),
}, {
x: randomScalingFactor(),
y: randomScalingFactor(),
}, {
x: randomScalingFactor(),
y: randomScalingFactor(),
}, {
x: randomScalingFactor(),
y: randomScalingFactor(),
}, {
x: randomScalingFactor(),
y: randomScalingFactor(),
}, {
x: randomScalingFactor(),
y: randomScalingFactor(),
}]
}]
}}
chartOptions: {return {
maintainAspectRatio: false,
responsive: true,
hoverMode: 'nearest',
intersect: true,
title: {
display: true,
text: 'Chart.js Scatter Chart - Multi Axis'
},
scales: {
xAxes: [{
position: 'bottom',
gridLines: {
zeroLineColor: 'rgba(0,0,0,1)'
}
}],
yAxes: [{
type: 'linear', // only linear but allow scale type registration. This allows extensions to exist solely for log scale for instance
display: true,
position: 'left',
id: 'y-axis-1',
}, {
type: 'linear', // only linear but allow scale type registration. This allows extensions to exist solely for log scale for instance
display: true,
position: 'right',
reverse: true,
id: 'y-axis-2',
// grid line settings
gridLines: {
drawOnChartArea: false, // only want the grid lines for one axis to show up
},
}],
}
}
}
}
}
}

View File

@ -1,32 +1,27 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Window
import QtQuick.Controls
import FluentUI
import QtQuick 2.15
import QtQuick.Layouts 1.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15
import FluentUI 1.0
FluExpander{
id:control
property string code: ""
headerText: "Source"
headerText: qsTr("Source")
contentHeight:content.height
focus: false
FluMultilineTextBox{
FluCopyableText{
id:content
width:parent.width
activeFocusOnTab: false
activeFocusOnPress: false
readOnly: true
text:highlightQmlCode(code)
textFormat: FluMultilineTextBox.RichText
KeyNavigation.priority: KeyNavigation.BeforeItem
background:Rectangle{
radius: 4
color:FluTheme.dark ? Qt.rgba(50/255,50/255,50/255,1) : Qt.rgba(247/255,247/255,247/255,1)
border.color: FluTheme.dark ? Qt.rgba(45/255,45/255,45/255,1) : Qt.rgba(226/255,229/255,234/255,1)
border.width: 1
}
padding: 10
topPadding: 10
leftPadding: 10
rightPadding: 10
bottomPadding: 10
}
FluIconButton{
@ -37,14 +32,9 @@ FluExpander{
rightMargin: 5
topMargin: 5
}
onActiveFocusChanged: {
if(activeFocus){
control.expand = true
}
}
onClicked:{
FluTools.clipText(content.text)
showSuccess("复制成功")
FluTools.clipText(FluTools.html2PlantText(content.text))
showSuccess(qsTr("The Copy is Successful"))
}
}
@ -59,7 +49,6 @@ FluExpander{
}
function highlightQmlCode(code) {
// 定义 QML 关键字列表
var qmlKeywords = [
"FluTextButton",
"FluAppBar",
@ -85,7 +74,6 @@ FluExpander{
"FluIcon",
"FluIconButton",
"FluInfoBar",
"FluItem",
"FluMediaPlayer",
"FluMenu",
"FluMenuItem",
@ -124,19 +112,37 @@ FluExpander{
"FluTableView",
"FluColors",
"FluTheme",
"FluStatusView",
"FluStatusLayout",
"FluRatingControl",
"FluPasswordBox",
"FluBreadcrumbBar",
"FluCopyableText",
"FluAcrylic",
"FluRemoteLoader"
"FluRemoteLoader",
"FluMenuBar",
"FluPagination",
"FluRadioButtons",
"FluImage",
"FluSpinBox",
"FluWatermark",
"FluTour",
"FluQRCode",
"FluTimeline",
"FluChart",
"FluRangeSlider",
"FluStaggeredLayout",
"FluProgressButton",
"FluLoadingButton",
"FluClip",
"FluNetwork",
"FluShortcutPicker",
"FluWindowResultLauncher",
"FluRouter",
"FluGroupBox",
"FluSheet",
];
code = code.replace(/\n/g, "<br>");
code = code.replace(/ /g, "&nbsp;");
return code.replace(RegExp("\\b(" + qmlKeywords.join("|") + ")\\b", "g"), "<span style='color: #c23a80'>$1</span>");
}
}

View File

@ -1,71 +0,0 @@
import QtQuick
import QtQuick.Layouts
import FluentUI
import org.wangwenx190.FramelessHelper
FluWindow {
id:window
property bool fixSize
property alias titleVisible: title_bar.titleVisible
property bool appBarVisible: true
default property alias content: container.data
FluAppBar {
id: title_bar
title: window.title
visible: window.appBarVisible
anchors {
top: parent.top
left: parent.left
right: parent.right
}
darkText: lang.dark_mode
}
Item{
id:container
anchors{
top: title_bar.bottom
left: parent.left
right: parent.right
bottom: parent.bottom
}
clip: true
}
FramelessHelper{
id:framless_helper
onReady: {
setTitleBarItem(title_bar)
moveWindowToDesktopCenter()
setHitTestVisible(title_bar.minimizeButton())
setHitTestVisible(title_bar.maximizeButton())
setHitTestVisible(title_bar.closeButton())
setWindowFixedSize(fixSize)
title_bar.maximizeButton.visible = !fixSize
if (blurBehindWindowEnabled)
window.backgroundVisible = false
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)
}
}

View File

@ -0,0 +1,10 @@
pragma Singleton
import QtQuick 2.15
import FluentUI 1.0
QtObject{
property int displayMode: FluNavigationViewType.Auto
}

View File

@ -1,29 +1,32 @@
pragma Singleton
import QtQuick
import FluentUI
import QtQuick 2.15
import FluentUI 1.0
FluObject{
property var navigationView
property var paneItemMenu
id:footer_items
FluPaneItemSeparator{}
FluPaneItem{
title:lang.about
title:qsTr("About")
icon:FluentIcons.Contact
tapFunc:function(){
FluApp.navigate("/about")
onTapListener:function(){
FluRouter.navigate("/about")
}
}
FluPaneItem{
title:lang.settings
title:qsTr("Settings")
menuDelegate: paneItemMenu
icon:FluentIcons.Settings
url:"qrc:/example/qml/page/T_Settings.qml"
onTap:{
navigationView.push("qrc:/example/qml/page/T_Settings.qml")
navigationView.push(url)
}
}

View File

@ -1,327 +1,509 @@
pragma Singleton
import QtQuick
import FluentUI
import QtQuick 2.15
import FluentUI 1.0
FluObject{
property var navigationView
property var paneItemMenu
function rename(item, newName){
if(newName && newName.trim().length>0){
item.title = newName;
}
}
FluPaneItem{
title:lang.home
icon:FluentIcons.Home
// cusIcon: Image{
// anchors.centerIn: parent
// source: FluTheme.dark ? "qrc:/example/res/svg/home_dark.svg" : "qrc:/example/res/svg/home.svg"
// sourceSize: Qt.size(30,30)
// width: 18
// height: 18
// }
onTap:{
navigationView.push("qrc:/example/qml/page/T_Home.qml")
id:item_home
count: 9
title: qsTr("Home")
menuDelegate: paneItemMenu
infoBadge: FluBadge{
count: item_home.count
}
icon: FluentIcons.Home
url: "qrc:/example/qml/page/T_Home.qml"
onTap: {
if(navigationView.getCurrentUrl()){
item_home.count = 0
}
navigationView.push(url)
}
}
FluPaneItemExpander{
title:lang.basic_input
icon:FluentIcons.CheckboxComposite
title: qsTr("PaneItemExpander Disabled")
iconVisible: false
disabled: true
}
FluPaneItemExpander{
id: item_expander_basic_input
title: qsTr("Basic Input")
icon: FluentIcons.CheckboxComposite
FluPaneItem{
title:"Buttons"
image:"qrc:/example/res/image/control/Button.png"
recentlyUpdated:true
desc:"A control that responds to user input and raisesa Click event."
onTap:{
navigationView.push("qrc:/example/qml/page/T_Buttons.qml")
id: item_buttons
count: 99
infoBadge: FluBadge{
count: item_buttons.count
}
title: qsTr("Buttons")
menuDelegate: paneItemMenu
extra: ({image:"qrc:/example/res/image/control/Button.png",recentlyUpdated:true,desc:qsTr("A control that responds to user input and raisesa Click event.")})
url: "qrc:/example/qml/page/T_Buttons.qml"
onTap: {
item_buttons.count = 0
navigationView.push(url)
}
}
FluPaneItem{
title:"Text"
onTap:{
navigationView.push("qrc:/example/qml/page/T_Text.qml")
id: item_text
title: qsTr("Text")
menuDelegate: paneItemMenu
count: 5
infoBadge: FluBadge{
count: item_text.count
color: Qt.rgba(82/255,196/255,26/255,1)
}
url: "qrc:/example/qml/page/T_Text.qml"
onTap: {
item_text.count = 0
navigationView.push(url)
}
}
FluPaneItem{
title:"Slider"
image:"qrc:/example/res/image/control/Slider.png"
recentlyUpdated:true
desc:"A control that lets the user select from a rangeof values by moving a Thumb control along atrack."
onTap:{
navigationView.push("qrc:/example/qml/page/T_Slider.qml")
}
title: qsTr("Image")
menuDelegate: paneItemMenu
url: "qrc:/example/qml/page/T_Image.qml"
onTap: { navigationView.push(url) }
}
FluPaneItem{
title:"CheckBox"
image:"qrc:/example/res/image/control/Checkbox.png"
recentlyUpdated:true
desc:"A control that a user can select or clear."
onTap:{
navigationView.push("qrc:/example/qml/page/T_CheckBox.qml")
}
title: qsTr("Slider")
menuDelegate: paneItemMenu
extra: ({image:"qrc:/example/res/image/control/Slider.png",recentlyUpdated:true,desc:qsTr("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"
onTap: { navigationView.push(url) }
}
FluPaneItem{
title:"ToggleSwitch"
onTap:{
navigationView.push("qrc:/example/qml/page/T_ToggleSwitch.qml")
}
title: qsTr("CheckBox")
menuDelegate: paneItemMenu
extra: ({image:"qrc:/example/res/image/control/Checkbox.png",recentlyUpdated:true,desc:qsTr("A control that a user can select or clear.")})
url: "qrc:/example/qml/page/T_CheckBox.qml"
onTap: { navigationView.push(url) }
}
FluPaneItem{
title: qsTr("RadioButton")
menuDelegate: paneItemMenu
url: "qrc:/example/qml/page/T_RadioButton.qml"
onTap: { navigationView.push(url) }
}
FluPaneItem{
title: qsTr("ToggleSwitch")
menuDelegate: paneItemMenu
url: "qrc:/example/qml/page/T_ToggleSwitch.qml"
onTap: { navigationView.push(url) }
}
FluPaneItem{
title: qsTr("GroupBox")
menuDelegate: paneItemMenu
url: "qrc:/example/qml/page/T_GroupBox.qml"
onTap: { navigationView.push(url) }
}
FluPaneItem{
title: qsTr("PaneItem Disabled")
disabled: true
icon: FluentIcons.Error
}
}
FluPaneItemExpander{
title:lang.form
icon:FluentIcons.GridView
FluPaneItem{
title:"TextBox"
onTap:{
navigationView.push("qrc:/example/qml/page/T_TextBox.qml")
}
title: qsTr("Form")
icon: FluentIcons.GridView
FluPaneItem {
title: qsTr("TextBox")
menuDelegate: paneItemMenu
url: "qrc:/example/qml/page/T_TextBox.qml"
onTap: { navigationView.push(url) }
}
FluPaneItem{
title:"TimePicker"
onTap:{
navigationView.push("qrc:/example/qml/page/T_TimePicker.qml")
}
title: qsTr("TimePicker")
menuDelegate: paneItemMenu
url: "qrc:/example/qml/page/T_TimePicker.qml"
onTap: { navigationView.push(url) }
}
FluPaneItem{
title:"DatePicker"
onTap:{
navigationView.push("qrc:/example/qml/page/T_DatePicker.qml")
}
title: qsTr("DatePicker")
menuDelegate: paneItemMenu
url: "qrc:/example/qml/page/T_DatePicker.qml"
onTap: { navigationView.push(url) }
}
FluPaneItem{
title:"CalendarPicker"
onTap:{
navigationView.push("qrc:/example/qml/page/T_CalendarPicker.qml")
}
title: qsTr("CalendarPicker")
menuDelegate: paneItemMenu
url: "qrc:/example/qml/page/T_CalendarPicker.qml"
onTap: { navigationView.push(url) }
}
FluPaneItem{
title:"ColorPicker"
onTap:{
navigationView.push("qrc:/example/qml/page/T_ColorPicker.qml")
}
title: qsTr("ColorPicker")
menuDelegate: paneItemMenu
url: "qrc:/example/qml/page/T_ColorPicker.qml"
onTap: { navigationView.push(url) }
}
FluPaneItem{
title: qsTr("ShortcutPicker")
menuDelegate: paneItemMenu
url: "qrc:/example/qml/page/T_ShortcutPicker.qml"
onTap: { navigationView.push(url) }
}
}
FluPaneItemExpander{
title:lang.surface
icon:FluentIcons.SurfaceHub
title: qsTr("Surface")
icon: FluentIcons.SurfaceHub
FluPaneItem{
title:"InfoBar"
image:"qrc:/example/res/image/control/InfoBar.png"
recentlyUpdated:true
desc:"An inline message to display app-wide statuschange information."
onTap:{
navigationView.push("qrc:/example/qml/page/T_InfoBar.qml")
}
title: qsTr("InfoBar")
menuDelegate: paneItemMenu
extra: ({image:"qrc:/example/res/image/control/InfoBar.png",recentlyUpdated:true,desc:qsTr("An inline message to display app-wide statuschange information.")})
url: "qrc:/example/qml/page/T_InfoBar.qml"
onTap: { navigationView.push(url) }
}
FluPaneItem{
title:"Progress"
onTap:{
navigationView.push("qrc:/example/qml/page/T_Progress.qml")
}
title: qsTr("Progress")
menuDelegate: paneItemMenu
url: "qrc:/example/qml/page/T_Progress.qml"
onTap: { navigationView.push(url) }
}
FluPaneItem{
title:"RatingControl"
onTap:{
navigationView.push("qrc:/example/qml/page/T_RatingControl.qml")
}
title: qsTr("RatingControl")
menuDelegate: paneItemMenu
url: "qrc:/example/qml/page/T_RatingControl.qml"
onTap: { navigationView.push(url) }
}
FluPaneItem{
title:"Badge"
onTap:{
navigationView.push("qrc:/example/qml/page/T_Badge.qml")
}
title: qsTr("Badge")
menuDelegate: paneItemMenu
url: "qrc:/example/qml/page/T_Badge.qml"
onTap: { navigationView.push(url) }
}
FluPaneItem{
title:"Rectangle"
onTap:{
navigationView.push("qrc:/example/qml/page/T_Rectangle.qml")
}
title: qsTr("Rectangle")
menuDelegate: paneItemMenu
url: "qrc:/example/qml/page/T_Rectangle.qml"
onTap: { navigationView.push(url) }
}
FluPaneItem{
title:"StatusView"
onTap:{
navigationView.push("qrc:/example/qml/page/T_StatusView.qml")
}
title: qsTr("Clip")
menuDelegate: paneItemMenu
url: "qrc:/example/qml/page/T_Clip.qml"
onTap: { navigationView.push(url) }
}
FluPaneItem{
title:"Carousel"
onTap:{
navigationView.push("qrc:/example/qml/page/T_Carousel.qml")
}
title: qsTr("Carousel")
menuDelegate: paneItemMenu
url: "qrc:/example/qml/page/T_Carousel.qml"
onTap: { navigationView.push(url) }
}
FluPaneItem{
title:"Expander"
onTap:{
navigationView.push("qrc:/example/qml/page/T_Expander.qml")
}
title: qsTr("Expander")
menuDelegate: paneItemMenu
url: "qrc:/example/qml/page/T_Expander.qml"
onTap: { navigationView.push(url) }
}
FluPaneItem{
title: qsTr("Watermark")
menuDelegate: paneItemMenu
url: "qrc:/example/qml/page/T_Watermark.qml"
onTap: { navigationView.push(url) }
}
}
FluPaneItemExpander{
title:lang.popus
icon:FluentIcons.ButtonMenu
FluPaneItem{
title:"Dialog"
onTap:{
navigationView.push("qrc:/example/qml/page/T_Dialog.qml")
}
title: qsTr("Layout")
icon: FluentIcons.DockLeft
FluPaneItem {
title: qsTr("StaggeredLayout")
menuDelegate: paneItemMenu
url: "qrc:/example/qml/page/T_StaggeredLayout.qml"
onTap: { navigationView.push(url) }
}
FluPaneItem{
title:"ComboBox"
onTap:{
title: qsTr("SplitLayout")
menuDelegate: paneItemMenu
url: "qrc:/example/qml/page/T_SplitLayout.qml"
onTap: { navigationView.push(url) }
}
FluPaneItem{
title: qsTr("StatusLayout")
menuDelegate: paneItemMenu
url: "qrc:/example/qml/page/T_StatusLayout.qml"
onTap: { navigationView.push(url) }
}
}
FluPaneItemExpander{
title: qsTr("Popus")
icon: FluentIcons.ButtonMenu
FluPaneItem{
title: qsTr("Dialog")
menuDelegate: paneItemMenu
url: "qrc:/example/qml/page/T_Dialog.qml"
onTap: { navigationView.push(url) }
}
FluPaneItem{
id: item_combobox
title: qsTr("ComboBox")
menuDelegate: paneItemMenu
count: 9
infoBadge:FluBadge{
count: item_combobox.count
color: Qt.rgba(250/255,173/255,20/255,1)
}
url: "qrc:/example/qml/page/T_ComboBox.qml"
onTap: {
item_combobox.count = 0
navigationView.push("qrc:/example/qml/page/T_ComboBox.qml")
}
}
FluPaneItem{
title:"Tooltip"
onTap:{
navigationView.push("qrc:/example/qml/page/T_Tooltip.qml")
}
title: qsTr("Tooltip")
menuDelegate: paneItemMenu
url: "qrc:/example/qml/page/T_Tooltip.qml"
onTap: { navigationView.push(url) }
}
FluPaneItem{
title:"Menu"
onTap:{
navigationView.push("qrc:/example/qml/page/T_Menu.qml")
}
title: qsTr("Menu")
menuDelegate: paneItemMenu
url: "qrc:/example/qml/page/T_Menu.qml"
onTap: { navigationView.push(url) }
}
FluPaneItem{
title: qsTr("Sheet")
menuDelegate: paneItemMenu
url: "qrc:/example/qml/page/T_Sheet.qml"
onTap: { navigationView.push(url) }
}
}
FluPaneItemExpander{
title:lang.navigation
icon:FluentIcons.AllApps
title: qsTr("Navigation")
icon: FluentIcons.AllApps
FluPaneItem{
title:"Pivot"
image:"qrc:/example/res/image/control/Pivot.png"
recentlyAdded:true
order:3
desc:"Presents information from different sources in atabbed view."
onTap:{
navigationView.push("qrc:/example/qml/page/T_Pivot.qml")
}
title: qsTr("Pivot")
menuDelegate: paneItemMenu
extra: ({image:"qrc:/example/res/image/control/Pivot.png",order:3,recentlyAdded:true,desc:qsTr("Presents information from different sources in a tabbed view.")})
url: "qrc:/example/qml/page/T_Pivot.qml"
onTap: { navigationView.push(url) }
}
FluPaneItem{
title:"BreadcrumbBar"
onTap:{
navigationView.push("qrc:/example/qml/page/T_BreadcrumbBar.qml")
}
title: qsTr("BreadcrumbBar")
menuDelegate: paneItemMenu
url: "qrc:/example/qml/page/T_BreadcrumbBar.qml"
onTap: { navigationView.push(url) }
}
FluPaneItem{
title:"TabView"
image:"qrc:/example/res/image/control/TabView.png"
recentlyAdded:true
order:1
desc:"A control that displays a collection of tabs thatcan be used to display several documents."
onTap:{
navigationView.push("qrc:/example/qml/page/T_TabView.qml")
}
title: qsTr("TabView")
menuDelegate: paneItemMenu
extra: ({image:"qrc:/example/res/image/control/TabView.png",order:1,recentlyAdded:true,desc:qsTr("A control that displays a collection of tabs thatcan be used to display several documents.")})
url: "qrc:/example/qml/page/T_TabView.qml"
onTap: { navigationView.push(url) }
}
FluPaneItem{
title:"TreeView"
onTap:{
navigationView.push("qrc:/example/qml/page/T_TreeView.qml")
}
title: qsTr("TreeView")
menuDelegate: paneItemMenu
url: "qrc:/example/qml/page/T_TreeView.qml"
onTap: { navigationView.push(url) }
}
FluPaneItem{
title:"TableView"
image:"qrc:/example/res/image/control/DataGrid.png"
recentlyAdded:true
order:4
desc:"The TableView control provides a flexible way to display a collection of data in rows and columns"
onTap:{
navigationView.push("qrc:/example/qml/page/T_TableView.qml")
}
title: qsTr("TableView")
menuDelegate: paneItemMenu
extra: ({image:"qrc:/example/res/image/control/DataGrid.png",order:4,recentlyAdded:true,desc:qsTr("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"
onTap: { navigationView.push(url) }
}
FluPaneItem{
title:"MultiWindow"
onTap:{
navigationView.push("qrc:/example/qml/page/T_MultiWindow.qml")
}
title: qsTr("Pagination")
menuDelegate: paneItemMenu
url: "qrc:/example/qml/page/T_Pagination.qml"
onTap: { navigationView.push(url) }
}
FluPaneItem{
title:"FlipView"
image:"qrc:/example/res/image/control/FlipView.png"
recentlyAdded:true
order:2
desc:"Presents a collection of items that the user canflip through, one item at a time."
onTap:{
navigationView.push("qrc:/example/qml/page/T_FlipView.qml")
}
title: qsTr("MultiWindow")
menuDelegate: paneItemMenu
url: "qrc:/example/qml/page/T_MultiWindow.qml"
onTap: { navigationView.push(url) }
}
FluPaneItem{
title: qsTr("FlipView")
menuDelegate: paneItemMenu
extra: ({image:"qrc:/example/res/image/control/FlipView.png",order:2,recentlyAdded:true,desc:qsTr("Presents a collection of items that the user canflip through, one item at a time.")})
url: "qrc:/example/qml/page/T_FlipView.qml"
onTap: { navigationView.push(url) }
}
}
FluPaneItemExpander{
title:lang.theming
title: qsTr("Theming")
icon:FluentIcons.Brightness
FluPaneItem{
title:"Acrylic"
onTap:{
navigationView.push("qrc:/example/qml/page/T_Acrylic.qml")
}
title: qsTr("Acrylic")
menuDelegate: paneItemMenu
url: "qrc:/example/qml/page/T_Acrylic.qml"
onTap: { navigationView.push(url) }
}
FluPaneItem{
title:"Theme"
onTap:{
navigationView.push("qrc:/example/qml/page/T_Theme.qml")
}
title: qsTr("Theme")
menuDelegate: paneItemMenu
url: "qrc:/example/qml/page/T_Theme.qml"
onTap: { navigationView.push(url) }
}
FluPaneItem{
title:"Typography"
onTap:{
navigationView.push("qrc:/example/qml/page/T_Typography.qml")
}
title: qsTr("Typography")
menuDelegate: paneItemMenu
url: "qrc:/example/qml/page/T_Typography.qml"
onTap: { navigationView.push(url) }
}
FluPaneItem{
title:"Awesome"
onTap:{
navigationView.push("qrc:/example/qml/page/T_Awesome.qml")
}
title: qsTr("Icons")
menuDelegate: paneItemMenu
url: "qrc:/example/qml/page/T_Icons.qml"
onTap: { navigationView.push(url) }
}
}
FluPaneItemExpander{
title:lang.media
icon:FluentIcons.Media
title: qsTr("Chart")
icon: FluentIcons.AreaChart
FluPaneItem{
title:"MediaPlayer"
image:"qrc:/example/res/image/control/MediaPlayerElement.png"
recentlyAdded:true
order:0
desc:"A control to display video and image content."
onTap:{
navigationView.push("qrc:/example/qml/page/T_MediaPlayer.qml")
}
title: qsTr("Bar Chart")
menuDelegate: paneItemMenu
url: "qrc:/example/qml/chart/T_BarChart.qml"
onTap: { navigationView.push(url) }
}
FluPaneItem{
title: qsTr("Line Chart")
menuDelegate: paneItemMenu
url: "qrc:/example/qml/chart/T_LineChart.qml"
onTap: { navigationView.push(url) }
}
FluPaneItem{
title: qsTr("Pie Chart")
menuDelegate: paneItemMenu
url: "qrc:/example/qml/chart/T_PieChart.qml"
onTap: { navigationView.push(url) }
}
FluPaneItem{
title: qsTr("Polar Area Chart")
menuDelegate: paneItemMenu
url: "qrc:/example/qml/chart/T_PolarAreaChart.qml"
onTap: { navigationView.push(url) }
}
FluPaneItem{
title: qsTr("Bubble Chart")
menuDelegate: paneItemMenu
url: "qrc:/example/qml/chart/T_BubbleChart.qml"
onTap: { navigationView.push(url) }
}
FluPaneItem{
title: qsTr("Scatter Chart")
menuDelegate: paneItemMenu
url: "qrc:/example/qml/chart/T_ScatterChart.qml"
onTap: { navigationView.push(url) }
}
FluPaneItem{
title: qsTr("Radar Chart")
menuDelegate: paneItemMenu
url: "qrc:/example/qml/chart/T_RadarChart.qml"
onTap: { navigationView.push(url) }
}
}
FluPaneItemSeparator{
spacing:10
size:1
}
FluPaneItemExpander{
title:lang.other
icon:FluentIcons.Shop
title: qsTr("Other")
icon: FluentIcons.Shop
FluPaneItem{
title:"RemoteLoader"
onTap:{
title: qsTr("OpenGL")
menuDelegate: paneItemMenu
url: "qrc:/example/qml/page/T_OpenGL.qml"
onTap: { navigationView.push(url) }
}
FluPaneItem{
title: qsTr("QRCode")
menuDelegate: paneItemMenu
url: "qrc:/example/qml/page/T_QRCode.qml"
onTap: { navigationView.push(url) }
}
FluPaneItem{
title: qsTr("Tour")
menuDelegate: paneItemMenu
url: "qrc:/example/qml/page/T_Tour.qml"
onTap: { navigationView.push(url) }
}
FluPaneItem{
title: qsTr("Timeline")
menuDelegate: paneItemMenu
url: "qrc:/example/qml/page/T_Timeline.qml"
onTap: { navigationView.push(url) }
}
FluPaneItem{
title: qsTr("Captcha")
menuDelegate: paneItemMenu
url: "qrc:/example/qml/page/T_Captcha.qml"
onTap: { navigationView.push(url) }
}
FluPaneItem{
title: qsTr("Network")
menuDelegate: paneItemMenu
url: "qrc:/example/qml/page/T_Network.qml"
onTap: { navigationView.push(url) }
}
FluPaneItem{
id: item_other
title: qsTr("Remote Loader")
menuDelegate: paneItemMenu
count: 99
infoBadge:FluBadge{
count: item_other.count
color: Qt.rgba(82/255,196/255,26/255,1)
}
url: "qrc:/example/qml/page/T_RemoteLoader.qml"
onTap: {
item_other.count = 0
navigationView.push("qrc:/example/qml/page/T_RemoteLoader.qml")
}
}
FluPaneItem{
title: qsTr("Hot Loader")
onTapListener: function(){
FluRouter.navigate("/hotload")
}
}
FluPaneItem{
title: qsTr("Test Crash")
onTapListener: function(){
AppInfo.testCrash()
}
Component.onCompleted: {
visible = FluTools.isWin()
}
}
}
function getRecentlyAddedData(){
var arr = []
for(var i=0;i<children.length;i++){
var item = children[i]
if(item instanceof FluPaneItem && item.recentlyAdded){
var items = navigationView.getItems();
for(var i=0;i<items.length;i++){
var item = items[i]
if(item instanceof FluPaneItem && item.extra && item.extra.recentlyAdded){
arr.push(item)
}
if(item instanceof FluPaneItemExpander){
for(var j=0;j<item.children.length;j++){
var itemChild = item.children[j]
if(itemChild instanceof FluPaneItem && itemChild.recentlyAdded){
arr.push(itemChild)
}
}
}
}
arr.sort(function(o1,o2){ return o2.order-o1.order })
arr.sort(function(o1,o2){ return o2.extra.order-o1.extra.order })
return arr
}
@ -330,7 +512,7 @@ FluObject{
var items = navigationView.getItems();
for(var i=0;i<items.length;i++){
var item = items[i]
if(item instanceof FluPaneItem && item.recentlyUpdated){
if(item instanceof FluPaneItem && item.extra && item.extra.recentlyUpdated){
arr.push(item)
}
}
@ -338,12 +520,20 @@ FluObject{
}
function getSearchData(){
if(!navigationView){
return
}
var arr = []
var items = navigationView.getItems();
for(var i=0;i<items.length;i++){
var item = items[i]
if(item instanceof FluPaneItem){
arr.push({title:item.title,key:item.key})
if (item.parent instanceof FluPaneItemExpander)
{
arr.push({title:`${item.parent.title} -> ${item.title}`,key:item.key})
}
else
arr.push({title:item.title,key:item.key})
}
}
return arr

View File

@ -1,9 +0,0 @@
pragma Singleton
import QtQuick
import QtQuick.Controls
import FluentUI
QtObject {
property int displayMode : FluNavigationView.Auto
}

View File

@ -1,3 +1,3 @@
singleton ItemsOriginal 1.0 ItemsOriginal.qml
singleton ItemsOriginal 1.0 ItemsOriginal.qml
singleton ItemsFooter 1.0 ItemsFooter.qml
singleton MainEvent 1.0 MainEvent.qml
singleton GlobalModel 1.0 GlobalModel.qml

View File

@ -1,42 +1,91 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Window
import QtQuick.Controls
import FluentUI
import "qrc:///example/qml/component"
import QtQuick 2.15
import QtQuick.Layouts 1.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15
import FluentUI 1.0
import "../component"
FluScrollablePage{
title:"Acrylic"
title: qsTr("Acrylic")
FluArea{
RowLayout{
spacing: 10
FluText{
text:"tintColor:"
Layout.alignment: Qt.AlignVCenter
}
FluColorPicker{
id:color_picker
}
}
RowLayout{
spacing: 10
FluText{
text:"tintOpacity:"
Layout.alignment: Qt.AlignVCenter
}
FluSlider{
id:slider_tint_opacity
value: 65
}
}
RowLayout{
spacing: 10
FluText{
text:"blurRadius:"
Layout.alignment: Qt.AlignVCenter
}
FluSlider{
id:slider_blur_radius
value: 32
}
}
FluFrame{
Layout.fillWidth: true
Layout.topMargin: 20
height: 1200/5+20
paddings: 10
FluRectangle{
width: 1920/5
height: 1200/5
radius:[15,15,15,15]
Layout.preferredHeight: 1200/4+20
padding: 10
Layout.topMargin: 10
FluClip{
width: 1920/4
height: 1200/4
radius:[8,8,8,8]
Image {
id:image
asynchronous: true
source: "qrc:/example/res/image/banner_3.jpg"
source: "qrc:/example/res/image/bg_scenic.jpg"
anchors.fill: parent
sourceSize: Qt.size(2*width,2*height)
}
FluAcrylic {
sourceItem:image
anchors.bottom: parent.bottom
anchors.right: parent.right
width: 100
height: 100
id:acrylic
target: image
width: 200
height: 200
tintOpacity: slider_tint_opacity.value/100
tintColor: color_picker.current
blurRadius: slider_blur_radius.value
x:(image.width-width)/2
y:(image.height-height)/2
FluText {
anchors.centerIn: parent
text: "Acrylic"
color: "#FFFFFF"
font.bold: true
font: FluTextStyle.Subtitle
}
MouseArea {
property point clickPos: Qt.point(0,0)
id:drag_area
preventStealing: true
anchors.fill: parent
onPressed: (mouse)=>{
clickPos = Qt.point(mouse.x, mouse.y)
}
onPositionChanged: (mouse)=>{
var delta = Qt.point(mouse.x - clickPos.x,mouse.y - clickPos.y)
acrylic.x = acrylic.x + delta.x
acrylic.y = acrylic.y + delta.y
}
}
}
Layout.topMargin: 20
@ -45,7 +94,7 @@ FluScrollablePage{
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -1
Layout.topMargin: -6
code:'Image{
id:image
width: 800
@ -54,10 +103,11 @@ FluScrollablePage{
radius: 8
}
FluAcrylic{
sourceItem:image
target:image
width: 100
height: 100
anchors.centerIn: parent
}
}'
}

View File

@ -1,70 +0,0 @@
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import QtQuick.Window
import FluentUI
FluContentPage {
title:"Awesome"
FluTextBox{
id:text_box
placeholderText: "请输入关键字"
anchors{
topMargin: 20
top:parent.top
}
}
FluFilledButton{
text:"搜索"
anchors{
left: text_box.right
verticalCenter: text_box.verticalCenter
leftMargin: 14
}
onClicked: {
grid_view.model = FluApp.awesomelist(text_box.text)
}
}
GridView{
id:grid_view
cellWidth: 80
cellHeight: 80
clip: true
model:FluApp.awesomelist()
ScrollBar.vertical: FluScrollBar {}
anchors{
topMargin: 10
top:text_box.bottom
left: parent.left
right: parent.right
bottom: parent.bottom
}
delegate: Item {
width: 68
height: 80
FluIconButton{
id:item_icon
iconSource:modelData.icon
anchors.horizontalCenter: parent.horizontalCenter
onClicked: {
var text ="FluentIcons."+modelData.name;
FluTools.clipText(text)
showSuccess("您复制了 "+text)
}
}
FluText {
id:item_name
font.pixelSize: 10
anchors.horizontalCenter: parent.horizontalCenter
anchors.top: item_icon.bottom
width:parent.width
wrapMode: Text.WrapAnywhere
text: modelData.name
horizontalAlignment: Text.AlignHCenter
}
}
}
}

View File

@ -1,30 +1,31 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Window
import QtQuick.Controls
import FluentUI
import "qrc:///example/qml/component"
import QtQuick 2.15
import QtQuick.Layouts 1.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15
import FluentUI 1.0
import "../component"
FluScrollablePage{
title:"Badge"
title: qsTr("Badge")
FluArea{
FluFrame{
Layout.fillWidth: true
Layout.topMargin: 20
height: 106
paddings: 10
height: 120
padding: 10
Column{
spacing: 15
anchors{
verticalCenter: parent.verticalCenter
left: parent.left
right: parent.right
}
FluText{
text:"一般出现在通知图标或头像的右上角,用于显示需要处理的消息条数"
wrapMode: Text.WrapAnywhere
width: parent.width
text: qsTr("It usually appears in the upper right corner of the notification icon or avatar to display the number of messages that need to be processed")
}
Row{
spacing: 20
Rectangle{
@ -33,6 +34,8 @@ FluScrollablePage{
radius: 8
color: Qt.rgba(191/255,191/255,191/255,1)
FluBadge{
topRight: true
showZero: true
count:0
}
}
@ -43,6 +46,8 @@ FluScrollablePage{
radius: 8
color: Qt.rgba(191/255,191/255,191/255,1)
FluBadge{
topRight: true
showZero: true
count:5
}
}
@ -52,6 +57,8 @@ FluScrollablePage{
radius: 8
color: Qt.rgba(191/255,191/255,191/255,1)
FluBadge{
topRight: true
showZero: true
count:50
}
}
@ -61,6 +68,8 @@ FluScrollablePage{
radius: 8
color: Qt.rgba(191/255,191/255,191/255,1)
FluBadge{
topRight: true
showZero: true
count:100
}
}
@ -70,6 +79,8 @@ FluScrollablePage{
radius: 8
color: Qt.rgba(191/255,191/255,191/255,1)
FluBadge{
topRight: true
showZero: true
isDot:true
}
}
@ -79,6 +90,8 @@ FluScrollablePage{
radius: 8
color: Qt.rgba(191/255,191/255,191/255,1)
FluBadge{
topRight: true
showZero: true
count:99
color: Qt.rgba(250/255,173/255,20/255,1)
}
@ -89,6 +102,8 @@ FluScrollablePage{
radius: 8
color: Qt.rgba(191/255,191/255,191/255,1)
FluBadge{
topRight: true
showZero: true
count:99
color: Qt.rgba(82/255,196/255,26/255,1)
}
@ -98,7 +113,7 @@ FluScrollablePage{
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -1
Layout.topMargin: -6
code:'Rectangle{
width: 40
height: 40

View File

@ -1,13 +1,13 @@
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import QtQuick.Window
import FluentUI
import "qrc:///example/qml/component"
import QtQuick 2.15
import QtQuick.Controls 2.15
import QtQuick.Layouts 1.15
import QtQuick.Window 2.15
import FluentUI 1.0
import "../component"
FluScrollablePage{
title:"BreadcurmbBar"
title: qsTr("BreadcurmbBar")
Component.onCompleted: {
var items = []
@ -18,11 +18,10 @@ FluScrollablePage{
breadcrumb_2.items = items
}
FluArea{
FluFrame{
Layout.fillWidth: true
height: 68
paddings: 10
Layout.topMargin: 20
Layout.preferredHeight: 68
padding: 10
FluBreadcrumbBar{
id:breadcrumb_1
@ -36,10 +35,10 @@ FluScrollablePage{
}
FluArea{
FluFrame{
Layout.fillWidth: true
height: 100
paddings: 10
Layout.preferredHeight: 100
padding: 10
Layout.topMargin: 20
ColumnLayout{
@ -48,7 +47,7 @@ FluScrollablePage{
spacing: 10
FluFilledButton{
text:"Reset sample"
text: qsTr("Reset sample")
onClicked:{
var items = []
for(var i=0;i<10;i++){
@ -66,7 +65,6 @@ FluScrollablePage{
Layout.fillWidth: true
onClickItem:
(model)=>{
//不是点击最后一个item元素
if(model.index+1!==count()){
breadcrumb_2.remove(model.index+1,count()-model.index-1)
}
@ -78,7 +76,7 @@ FluScrollablePage{
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -1
Layout.topMargin: -6
code:'FluBreadcrumbBar{
width:parent.width
separator:">"

View File

@ -1,29 +1,27 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Window
import QtQuick.Controls
import QtQuick.Controls.Basic
import FluentUI
import "qrc:///example/qml/component"
import QtQuick 2.15
import QtQuick.Layouts 1.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15
import FluentUI 1.0
import "../component"
FluScrollablePage{
title:"Buttons"
title: qsTr("Buttons")
FluText{
Layout.topMargin: 20
text:"支持Tab键切换焦点空格键执行点击事件"
text: qsTr("Support the Tab key to switch focus, and the Space key to perform click events")
}
FluArea{
FluFrame{
Layout.fillWidth: true
height: 68
paddings: 10
Layout.topMargin: 20
Layout.preferredHeight: 68
Layout.topMargin: 10
padding: 10
FluTextButton{
disabled:text_button_switch.checked
text:"Text Button"
disabled: text_button_switch.checked
text: qsTr("Text Button")
onClicked: {
showInfo("点击Text Button")
}
@ -33,17 +31,17 @@ FluScrollablePage{
}
}
FluToggleSwitch{
id:text_button_switch
id: text_button_switch
anchors{
right: parent.right
verticalCenter: parent.verticalCenter
}
text:"Disabled"
text: qsTr("Disabled")
}
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -1
Layout.topMargin: -6
code:'FluTextButton{
text:"Text Button"
onClicked: {
@ -52,17 +50,17 @@ FluScrollablePage{
}'
}
FluArea{
FluFrame{
Layout.fillWidth: true
height: 68
paddings: 10
Layout.preferredHeight: 68
padding: 10
Layout.topMargin: 20
FluButton{
disabled:button_switch.checked
text:"Standard Button"
disabled: button_switch.checked
text: qsTr("Standard Button")
onClicked: {
showInfo("点击StandardButton")
showInfo(qsTr("Click StandardButton"))
}
anchors{
verticalCenter: parent.verticalCenter
@ -70,17 +68,17 @@ FluScrollablePage{
}
}
FluToggleSwitch{
id:button_switch
id: button_switch
anchors{
right: parent.right
verticalCenter: parent.verticalCenter
}
text:"Disabled"
text: qsTr("Disabled")
}
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -1
Layout.topMargin: -6
code:'FluButton{
text:"Standard Button"
onClicked: {
@ -89,17 +87,17 @@ FluScrollablePage{
}'
}
FluArea{
FluFrame{
Layout.fillWidth: true
height: 68
Layout.preferredHeight: 68
Layout.topMargin: 20
paddings: 10
padding: 10
FluFilledButton{
disabled:filled_button_switch.checked
text:"Filled Button"
disabled: filled_button_switch.checked
text: qsTr("Filled Button")
onClicked: {
showWarning("点击FilledButton"+height)
showWarning(qsTr("Click FilledButton"))
}
anchors{
verticalCenter: parent.verticalCenter
@ -107,17 +105,17 @@ FluScrollablePage{
}
}
FluToggleSwitch{
id:filled_button_switch
id: filled_button_switch
anchors{
right: parent.right
verticalCenter: parent.verticalCenter
}
text:"Disabled"
text: qsTr("Disabled")
}
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -1
Layout.topMargin: -6
code:'FluFilledButton{
text:"Filled Button"
onClicked: {
@ -126,32 +124,32 @@ FluScrollablePage{
}'
}
FluArea{
FluFrame{
Layout.fillWidth: true
height: 68
Layout.preferredHeight: 68
Layout.topMargin: 20
paddings: 10
padding: 10
FluToggleButton{
disabled:toggle_button_switch.checked
text:"Toggle Button"
text: qsTr("Toggle Button")
anchors{
verticalCenter: parent.verticalCenter
left: parent.left
}
}
FluToggleSwitch{
id:toggle_button_switch
id: toggle_button_switch
anchors{
right: parent.right
verticalCenter: parent.verticalCenter
}
text:"Disabled"
text: qsTr("Disabled")
}
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -1
Layout.topMargin: -6
code:'FluToggleButton{
text:"Toggle Button"
onClicked: {
@ -160,36 +158,171 @@ 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{
FluFrame{
Layout.fillWidth: true
height: 68
paddings: 10
Layout.preferredHeight: 68
Layout.topMargin: 20
FluIconButton{
iconSource:FluentIcons.ChromeCloseContrast
disabled:icon_button_switch.checked
iconSize: 15
padding: 10
FluProgressButton{
id: btn_progress
disabled: progress_button_switch.checked
text: qsTr("Progress Button")
anchors{
verticalCenter: parent.verticalCenter
left: parent.left
}
onClicked:{
showSuccess("点击IconButton")
onClicked: {
btn_progress.progress = 0
timer_progress.restart()
}
}
FluToggleSwitch{
id:icon_button_switch
id: progress_button_switch
anchors{
right: parent.right
verticalCenter: parent.verticalCenter
}
text:"Disabled"
text: qsTr("Disabled")
}
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -1
Layout.topMargin: -6
code:'FluProgressButton{
text:"Progress Button"
onClicked: {
}
}'
}
FluFrame{
Layout.fillWidth: true
Layout.preferredHeight: 68
Layout.topMargin: 20
padding: 10
FluLoadingButton{
id: btn_loading
loading: loading_button_switch.checked
text: qsTr("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: qsTr("Loading")
}
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -6
code:'FluLoadingButton{
text:"Loading Button"
onClicked: {
}
}'
}
FluFrame{
Layout.fillWidth: true
Layout.preferredHeight: layout_icon_button.height + 30
padding: 10
Layout.topMargin: 20
Flow{
id: layout_icon_button
spacing: 10
anchors{
verticalCenter: parent.verticalCenter
left: parent.left
right: icon_button_switch.left
}
FluIconButton{
disabled: icon_button_switch.checked
iconDelegate: Image{ sourceSize: Qt.size(40,40) ; width: 20; height: 20; source: "qrc:/example/res/image/ic_home_github.png" }
onClicked:{
showSuccess(qsTr("Click IconButton"))
}
}
FluIconButton{
iconSource: FluentIcons.ChromeCloseContrast
disabled: icon_button_switch.checked
iconSize: 15
text: qsTr("IconOnly")
display: Button.IconOnly
onClicked:{
showSuccess(qsTr("Button.IconOnly"))
}
}
FluIconButton{
iconSource: FluentIcons.ChromeCloseContrast
disabled: icon_button_switch.checked
iconSize: 15
text: qsTr("TextOnly")
display: Button.TextOnly
onClicked:{
showSuccess(qsTr("Button.TextOnly"))
}
}
FluIconButton{
iconSource: FluentIcons.ChromeCloseContrast
disabled: icon_button_switch.checked
iconSize: 15
text: qsTr("TextBesideIcon")
display: Button.TextBesideIcon
onClicked:{
showSuccess(qsTr("Button.TextBesideIcon"))
}
}
FluIconButton{
iconSource: FluentIcons.ChromeCloseContrast
disabled: icon_button_switch.checked
iconSize: 15
text: qsTr("TextUnderIcon")
display: Button.TextUnderIcon
onClicked:{
showSuccess(qsTr("Button.TextUnderIcon"))
}
}
}
FluToggleSwitch{
id: icon_button_switch
anchors{
right: parent.right
verticalCenter: parent.verticalCenter
}
text: qsTr("Disabled")
}
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -6
code:'FluIconButton{
iconSource:FluentIcons.ChromeCloseContrast
onClicked: {
@ -198,101 +331,99 @@ FluScrollablePage{
}'
}
FluArea{
FluFrame{
Layout.fillWidth: true
height: 68
paddings: 10
Layout.preferredHeight: 68
padding: 10
Layout.topMargin: 20
FluDropDownButton{
disabled:drop_down_button_switch.checked
text:"DropDownButton"
disabled: drop_down_button_switch.checked
text: qsTr("DropDownButton")
anchors{
verticalCenter: parent.verticalCenter
left: parent.left
}
items:[
FluMenuItem{
text:"Menu_1"
},
FluMenuItem{
text:"Menu_2"
},
FluMenuItem{
text:"Menu_3"
},
FluMenuItem{
text:"Menu_4"
FluMenuItem{
text: qsTr("Menu_1")
}
FluMenuItem{
text: qsTr("Menu_2")
}
FluMenuItem{
text: qsTr("Menu_3")
}
FluMenuItem{
text: qsTr("Menu_4")
onClicked: {
}
]
}
}
FluToggleSwitch{
id:drop_down_button_switch
id: drop_down_button_switch
anchors{
right: parent.right
verticalCenter: parent.verticalCenter
}
text:"Disabled"
text: qsTr("Disabled")
}
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -1
Layout.topMargin: -6
code:'FluDropDownButton{
text:"DropDownButton"
items:[
FluMenuItem{
text:"Menu_1"
},
FluMenuItem{
text:"Menu_2"
},
FluMenuItem{
text:"Menu_3"
},
FluMenuItem{
text:"Menu_4"
}
]
FluMenuItem{
text:"Menu_1"
},
FluMenuItem{
text:"Menu_2"
},
FluMenuItem{
text:"Menu_3"
},
FluMenuItem{
text:"Menu_4"
}
}'
}
FluArea{
FluFrame{
Layout.fillWidth: true
height: 100
paddings: 10
Layout.preferredHeight: 100
padding: 10
Layout.topMargin: 20
ColumnLayout{
FluRadioButtons{
spacing: 8
anchors{
verticalCenter: parent.verticalCenter
left: parent.left
}
Repeater{
id:repeater
property int selecIndex : 0
model: 3
delegate: FluRadioButton{
checked : repeater.selecIndex===index
disabled:radio_button_switch.checked
text:"Radio Button_"+index
clickListener:function(){
repeater.selecIndex = index
}
}
FluRadioButton{
disabled:radio_button_switch.checked
text: qsTr("Radio Button_1")
}
FluRadioButton{
disabled:radio_button_switch.checked
text: qsTr("Radio Button_2")
}
FluRadioButton{
disabled:radio_button_switch.checked
text: qsTr("Radio Button_3")
}
}
FluToggleSwitch{
id:radio_button_switch
id: radio_button_switch
anchors{
right: parent.right
verticalCenter: parent.verticalCenter
}
text:"Disabled"
text: qsTr("Disabled")
}
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -1
Layout.topMargin: -6
code:'FluRadioButton{
checked:true
text:"Text Button"

View File

@ -1,47 +1,33 @@
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import QtQuick.Window
import FluentUI
import "qrc:///example/qml/component"
import QtQuick 2.15
import QtQuick.Controls 2.15
import QtQuick.Layouts 1.15
import QtQuick.Window 2.15
import FluentUI 1.0
import "../component"
FluScrollablePage{
title:"CalendarPicker"
title: qsTr("CalendarPicker")
FluArea{
FluFrame{
Layout.fillWidth: true
Layout.topMargin: 20
height: 350
paddings: 10
FluCalendarView{
}
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -1
code:'FluCalendarView{
}'
}
FluArea{
Layout.fillWidth: true
Layout.topMargin: 20
height: 80
paddings: 10
Layout.preferredHeight: 80
padding: 10
ColumnLayout{
anchors{
verticalCenter: parent.verticalCenter
left: parent.left
}
FluCalendarPicker{
onAccepted:{
showSuccess(current.toLocaleString())
}
}
}
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -1
Layout.topMargin: -6
code:'FluCalendarPicker{
}'

View File

@ -0,0 +1,59 @@
import QtQuick 2.15
import QtQuick.Layouts 1.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15
import FluentUI 1.0
import "../component"
FluScrollablePage{
title: qsTr("Captcha")
FluCaptcha{
id: captcha
ignoreCase:switch_case.checked
MouseArea{
anchors.fill: parent
cursorShape: Qt.PointingHandCursor
onClicked: {
captcha.refresh()
}
}
}
FluButton{
text: qsTr("Refresh")
Layout.topMargin: 20
onClicked: {
captcha.refresh()
}
}
FluToggleSwitch{
id: switch_case
text: qsTr("Ignore Case")
checked: true
Layout.topMargin: 10
}
RowLayout{
spacing: 10
Layout.topMargin: 10
FluTextBox{
id:text_box
placeholderText: qsTr("Please enter a verification code")
Layout.preferredWidth: 240
}
FluButton{
text:"verify"
onClicked: {
var success = captcha.verify(text_box.text)
if(success){
showSuccess(qsTr("The verification code is correct"))
}else{
showError(qsTr("Error validation, please re-enter"))
}
}
}
}
}

View File

@ -1,19 +1,31 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Window
import QtQuick.Controls
import FluentUI
import "qrc:///example/qml/component"
import QtQuick 2.15
import QtQuick.Layouts 1.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15
import FluentUI 1.0
import "../component"
FluScrollablePage{
title:"Carousel"
title: qsTr("Carousel")
FluArea{
ListModel{
id:data_model
ListElement{
url:"qrc:/example/res/image/banner_1.jpg"
}
ListElement{
url:"qrc:/example/res/image/banner_2.jpg"
}
ListElement{
url:"qrc:/example/res/image/banner_3.jpg"
}
}
FluFrame{
Layout.fillWidth: true
height: 370
paddings: 10
Layout.topMargin: 20
padding: 10
Column{
spacing: 15
anchors{
@ -21,26 +33,112 @@ FluScrollablePage{
left:parent.left
}
FluText{
text:"轮播图,支持无限轮播,无限滑动,用ListView实现的组件"
text: qsTr("Carousel map, support infinite carousel, infinite swipe, and components implemented with ListView")
}
FluCarousel{
id:carousel
Layout.topMargin: 20
Layout.leftMargin: 5
Component.onCompleted: {
carousel.setData([{url:"qrc:/example/res/image/banner_1.jpg"},{url:"qrc:/example/res/image/banner_2.jpg"},{url:"qrc:/example/res/image/banner_3.jpg"}])
Item{
width: 400
height: 300
FluShadow{
radius: 8
}
FluCarousel{
anchors.fill: parent
delegate: Component{
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"}]
}
}
}
}
}
FluFrame{
Layout.fillWidth: true
height: 340
padding: 10
Layout.topMargin: 10
Column{
spacing: 15
anchors{
verticalCenter: parent.verticalCenter
left:parent.left
}
Item{
width: 400
height: 300
FluShadow{
radius: 8
}
FluCarousel{
anchors.fill: parent
loopTime:1500
indicatorGravity: Qt.AlignHCenter | Qt.AlignTop
indicatorMarginTop:15
delegate: Component{
Item{
anchors.fill: parent
Image {
anchors.fill: parent
source: model.url
asynchronous: true
fillMode:Image.PreserveAspectCrop
}
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
}
}
}
}
Layout.topMargin: 20
Layout.leftMargin: 5
Component.onCompleted: {
var arr = []
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_3.jpg",title:"有效投资扩大 激发增长动能"})
model = arr
}
}
}
}
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -1
Layout.topMargin: -6
code:'FluCarousel{
id:carousel
width: 400
height: 300
delegate: Component{
Image {
anchors.fill: parent
source: model.url
asynchronous: true
fillMode:Image.PreserveAspectCrop
}
}
Component.onCompleted: {
setData([{url:"qrc:/example/res/image/banner_1.jpg"},{url:"qrc:/example/res/image/banner_2.jpg"},{url:"qrc:/example/res/image/banner_3.jpg"}])
carousel.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"}]
}
}'
}

View File

@ -1,45 +1,113 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Window
import QtQuick.Controls
import FluentUI
import "qrc:///example/qml/component"
import QtQuick 2.15
import QtQuick.Layouts 1.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15
import FluentUI 1.0
import "../component"
FluScrollablePage{
title:"CheckBox"
title: qsTr("CheckBox")
FluArea{
FluFrame{
Layout.fillWidth: true
height: 68
paddings: 10
Layout.topMargin: 20
Layout.preferredHeight: 72
padding: 10
FluText{
text: qsTr("A 2-state CheckBox")
}
Row{
spacing: 30
anchors.verticalCenter: parent.verticalCenter
FluCheckBox{
disabled: check_box_switch.checked
anchors{
top: parent.top
topMargin: 30
}
FluCheckBox{
disabled: check_box_switch.checked
text:"Text"
disabled: check_box_switch_two.checked
}
FluCheckBox{
disabled: check_box_switch_two.checked
text: qsTr("Right")
}
FluCheckBox{
disabled: check_box_switch_two.checked
text: qsTr("Left")
textRight: false
}
}
FluToggleSwitch{
id:check_box_switch
id:check_box_switch_two
anchors{
right: parent.right
verticalCenter: parent.verticalCenter
}
text:"Disabled"
text: qsTr("Disabled")
}
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -1
Layout.topMargin: -6
code:'FluCheckBox{
text:"Text"
}'
}
FluFrame{
Layout.fillWidth: true
Layout.preferredHeight: 72
padding: 10
Layout.topMargin: 20
FluText{
text: qsTr("A 3-state CheckBox")
}
Row{
spacing: 30
anchors{
top: parent.top
topMargin: 30
}
FluCheckBox{
property int count: 1
text: qsTr("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: qsTr("Disabled")
}
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -6
code:'FluCheckBox{
text:"Text"
indeterminate:true
}'
}
}

105
example/qml/page/T_Clip.qml Normal file
View File

@ -0,0 +1,105 @@
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"
FluScrollablePage{
title: qsTr("Clip")
FluFrame{
Layout.fillWidth: true
Layout.preferredHeight: 380
padding: 10
Column{
spacing: 15
anchors{
verticalCenter: parent.verticalCenter
left: parent.left
}
FluText{
text: qsTr("Use with images (this component will have no effect under software rendering)")
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: -6
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)
}
}'
}
}

View File

@ -1,71 +1,32 @@
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import QtQuick.Window
import FluentUI
import "qrc:///example/qml/component"
import QtQuick 2.15
import QtQuick.Controls 2.15
import QtQuick.Layouts 1.15
import QtQuick.Window 2.15
import FluentUI 1.0
import "../component"
FluScrollablePage{
title:"ColorPicker"
title: qsTr("ColorPicker")
FluArea{
FluFrame{
Layout.fillWidth: true
height: 280
Layout.topMargin: 20
paddings: 10
ColumnLayout{
anchors{
verticalCenter: parent.verticalCenter
left:parent.left
}
FluText{
text:"此颜色组件是Github上的开源项目"
}
FluTextButton{
leftPadding: 0
rightPadding: 0
text:"https://github.com/rshest/qml-colorpicker"
onClicked: {
Qt.openUrlExternally(text)
}
}
FluColorView{
}
}
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -1
code:'FluColorView{
}'
}
FluArea{
Layout.fillWidth: true
Layout.topMargin: 20
height: 60
paddings: 10
Layout.preferredHeight: 60
padding: 10
RowLayout{
FluText{
text:"点击选择颜色->"
text: qsTr("Click to Select a Color - >")
Layout.alignment: Qt.AlignVCenter
}
FluColorPicker{
}
FluColorPicker{}
}
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -1
Layout.topMargin: -6
code:'FluColorPicker{
}'
}
}

View File

@ -1,19 +1,18 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Window
import QtQuick.Controls
import FluentUI
import "qrc:///example/qml/component"
import QtQuick 2.15
import QtQuick.Layouts 1.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15
import FluentUI 1.0
import "../component"
FluScrollablePage{
title:"ComboBox"
title: qsTr("ComboBox")
FluArea{
FluFrame{
Layout.fillWidth: true
height: 80
paddings: 5
Layout.topMargin: 20
Layout.preferredHeight: 80
padding: 5
Column{
spacing: 5
anchors.verticalCenter: parent.verticalCenter
@ -28,18 +27,38 @@ FluScrollablePage{
ListElement { text: "Apple" }
ListElement { text: "Coconut" }
}
onAccepted: {
if (find(editText) === -1)
model_1.append({text: editText})
}
}
}
FluFrame {
Layout.fillWidth: true
Layout.preferredHeight: 80
padding: 5
Layout.topMargin: 20
Column{
spacing: 5
anchors.verticalCenter: parent.verticalCenter
FluText{
text: "disabled=true"
x:10
}
FluComboBox {
disabled: true
model: ListModel {
id: model_2
ListElement { text: "Banana" }
ListElement { text: "Apple" }
ListElement { text: "Coconut" }
}
}
}
}
FluArea{
FluFrame{
Layout.fillWidth: true
height: 80
paddings: 10
padding: 10
Layout.topMargin: 20
Column{
spacing: 5
@ -51,21 +70,21 @@ FluScrollablePage{
FluComboBox {
editable: true
model: ListModel {
id: model_2
id: model_3
ListElement { text: "Banana" }
ListElement { text: "Apple" }
ListElement { text: "Coconut" }
}
onAccepted: {
if (find(editText) === -1)
model_2.append({text: editText})
model_3.append({text: editText})
}
}
}
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -1
Layout.topMargin: -6
code:'FluComboBox{
editable: true
model: ListModel {

View File

@ -1,62 +1,66 @@
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import QtQuick.Window
import FluentUI
import "qrc:///example/qml/component"
import QtQuick 2.15
import QtQuick.Controls 2.15
import QtQuick.Layouts 1.15
import QtQuick.Window 2.15
import FluentUI 1.0
import "../component"
FluScrollablePage{
title:"TimePicker"
title: qsTr("DatePicker")
FluArea{
FluFrame{
Layout.fillWidth: true
Layout.topMargin: 20
height: 80
paddings: 10
Layout.preferredHeight: 80
padding: 10
ColumnLayout{
anchors{
verticalCenter: parent.verticalCenter
left: parent.left
}
FluText{
text:"showYear=true"
text: qsTr("showYear=true")
}
FluDatePicker{
current: new Date()
onAccepted: {
showSuccess(current.toLocaleDateString())
}
}
}
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -1
Layout.topMargin: -6
code:'FluDatePicker{
}'
}
FluArea{
FluFrame{
Layout.fillWidth: true
Layout.topMargin: 20
height: 80
paddings: 10
Layout.preferredHeight: 80
padding: 10
ColumnLayout{
anchors{
verticalCenter: parent.verticalCenter
left: parent.left
}
FluText{
text:"showYear=false"
text: qsTr("showYear=false")
}
FluDatePicker{
showYear:false
showYear: false
onAccepted: {
showSuccess(current.toLocaleDateString())
}
}
}
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -1
Layout.topMargin: -6
code:'FluDatePicker{
showYear:false
}'

View File

@ -1,23 +1,21 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Window
import QtQuick.Controls
import FluentUI
import "qrc:///example/qml/component"
import QtQuick 2.15
import QtQuick.Layouts 1.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15
import FluentUI 1.0
import "../component"
FluScrollablePage{
title:"Dialog"
title: qsTr("Dialog")
FluArea{
FluFrame{
Layout.fillWidth: true
height: 68
paddings: 10
Layout.topMargin: 20
Layout.preferredHeight: 68
padding: 10
FluButton{
anchors.verticalCenter: parent.verticalCenter
Layout.topMargin: 20
text:"Show Double Button Dialog"
text: qsTr("Show Double Button Dialog")
onClicked: {
double_btn_dialog.open()
}
@ -25,48 +23,47 @@ FluScrollablePage{
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -1
Layout.topMargin: -6
code:'FluContentDialog{
id:dialog
title:"友情提示"
message:"确定要退出程序么?"
negativeText:"取消"
buttonFlags: FluContentDialog.NegativeButton | FluContentDialog.PositiveButton
title: qsTr("Friendly Reminder")
message: qsTr("Are you sure you want to opt out?")
negativeText: qsTr("Cancel")
buttonFlags: FluContentDialogType.NegativeButton | FluContentDialogType.PositiveButton
onNegativeClicked:{
showSuccess("点击取消按钮")
showSuccess(qsTr("Click the Cancel Button"))
}
positiveText:"确定"
positiveText: qsTr("OK")
onPositiveClicked:{
showSuccess("点击确定按钮")
}
showSuccess(qsTr("Click the OK Button"))
}
}
dialog.open()'
}
FluContentDialog{
id:double_btn_dialog
title:"友情提示"
message:"确定要退出程序么?"
buttonFlags: FluContentDialog.NegativeButton | FluContentDialog.PositiveButton
negativeText:"取消"
onNegativeClicked:{
showSuccess("点击取消按钮")
title: qsTr("Friendly Reminder")
message: qsTr("Are you sure you want to opt out?")
buttonFlags: FluContentDialogType.NegativeButton | FluContentDialogType.PositiveButton
negativeText: qsTr("Cancel")
onNegativeClicked: {
showSuccess(qsTr("Click the Cancel Button"))
}
positiveText:"确定"
positiveText: qsTr("OK")
onPositiveClicked:{
showSuccess("点击确定按钮")
showSuccess(qsTr("Click the OK Button"))
}
}
FluArea{
FluFrame{
Layout.fillWidth: true
height: 68
paddings: 10
Layout.preferredHeight: 68
padding: 10
Layout.topMargin: 20
FluButton{
anchors.verticalCenter: parent.verticalCenter
Layout.topMargin: 20
text:"Show Triple Button Dialog"
text: qsTr("Show Triple Button Dialog")
onClicked: {
triple_btn_dialog.open()
}
@ -74,45 +71,161 @@ FluScrollablePage{
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -1
Layout.topMargin: -6
code:'FluContentDialog{
id:dialog
title:"友情提示"
message:"确定要退出程序么?"
negativeText:"取消"
buttonFlags: FluContentDialog.NeutralButton | FluContentDialog.NegativeButton | FluContentDialog.PositiveButton
negativeText:"取消"
onNegativeClicked:{
showSuccess("点击取消按钮")
id: dialog
title: qsTr("Friendly Reminder")
message: qsTr("Are you sure you want to opt out?")
negativeText: qsTr("Cancel")
buttonFlags: FluContentDialogType.NeutralButton | FluContentDialogType.NegativeButton | FluContentDialogType.PositiveButton
negativeText: qsTr("Cancel")
onNegativeClicked: {
showSuccess(qsTr("Click the Cancel Button"))
}
positiveText:"确定"
onPositiveClicked:{
showSuccess("点击确定按钮")
positiveText: qsTr("OK")
onPositiveClicked: {
showSuccess(qsTr("Click the OK Button"))
}
neutralText:"最小化"
onNeutralClicked:{
showSuccess("点击最小化按钮")
neutralText: qsTr("Minimize")
onNeutralClicked: {
showSuccess(qsTr("Click Minimize"))
}
}
dialog.open()'
}
FluContentDialog{
id:triple_btn_dialog
title:"友情提示"
message:"确定要退出程序么?"
buttonFlags: FluContentDialog.NeutralButton | FluContentDialog.NegativeButton | FluContentDialog.PositiveButton
negativeText:"取消"
onNegativeClicked:{
showSuccess("点击取消按钮")
id: triple_btn_dialog
title: qsTr("Friendly Reminder")
message: qsTr("Are you sure you want to opt out?")
buttonFlags: FluContentDialogType.NeutralButton | FluContentDialogType.NegativeButton | FluContentDialogType.PositiveButton
negativeText: qsTr("Cancel")
onNegativeClicked: {
showSuccess(qsTr("Click the Cancel Button"))
}
positiveText:"确定"
onPositiveClicked:{
showSuccess("点击确定按钮")
positiveText: qsTr("OK")
onPositiveClicked: {
showSuccess(qsTr("Click the OK Button"))
}
neutralText:"最小化"
onNeutralClicked:{
showSuccess("点击最小化按钮")
neutralText: qsTr("Minimize")
onNeutralClicked: {
showSuccess(qsTr("Click Minimize"))
}
}
FluFrame{
Layout.fillWidth: true
Layout.preferredHeight: 100
padding: 10
Layout.topMargin: 20
FluButton{
anchors.top: parent.top
anchors.topMargin: 5
text: qsTr("Custom Content Dialog")
onClicked: {
custom_btn_dialog.open()
}
}
FluButton{
anchors.top: parent.top
anchors.topMargin: 48
text: qsTr("Custom Content Dialog2")
onClicked: {
custom_btn_dialog2.open()
}
}
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -6
code:'FluContentDialog{
id: dialog
title: qsTr("Friendly Reminder")
message: qsTr("Data is loading, please wait...")
negativeText: qsTr("Unload")
contentDelegate: Component{
Item{
width: parent.width
height: 80
FluProgressRing{
anchors.centerIn: parent
}
}
}
onNegativeClicked: {
showSuccess(qsTr("Click the Cancel Button"))
}
positiveText :qsTr("OK")
onPositiveClicked: {
showSuccess(qsTr("Click the OK Button"))
}
}
dialog.open()'
}
FluContentDialog{
id: custom_btn_dialog
title: qsTr("Friendly Reminder")
message: qsTr("Data is loading, please wait...")
negativeText: qsTr("Unload")
contentDelegate: Component{
Item{
implicitWidth: parent.width
implicitHeight: 80
FluProgressRing{
anchors.centerIn: parent
}
}
}
onNegativeClicked: {
showSuccess(qsTr("Click the Cancel Button"))
}
positiveText: qsTr("OK")
onPositiveClickListener: function(){
showError(qsTr("Test the InfoBar level on top of the Popup"))
}
}
FluContentDialog{
id:custom_btn_dialog2
title: qsTr("Line Chart")
contentDelegate: Component{
Item{
implicitWidth: parent.width
implicitHeight: 300
FluChart{
anchors.fill: parent
chartType: 'line'
chartData: { return {
labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'],
datasets: [{
label: 'My First Dataset',
data: [65, 59, 80, 81, 56, 55, 40],
fill: false,
borderColor: 'rgb(75, 192, 192)',
tension: 0.1
}]
}
}
chartOptions: { return {
maintainAspectRatio: false,
title: {
display: true,
text: 'Chart.js Line Chart - Stacked'
},
tooltips: {
mode: 'index',
intersect: false
}
}
}
}
}
}
buttonFlags: FluContentDialogType.PositiveButton
positiveText: qsTr("OK")
onPositiveClicked: {
showSuccess(qsTr("Click the OK Button"))
}
}
}

View File

@ -1,19 +1,18 @@
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import QtQuick.Window
import FluentUI
import "qrc:///example/qml/component"
import QtQuick 2.15
import QtQuick.Controls 2.15
import QtQuick.Layouts 1.15
import QtQuick.Window 2.15
import FluentUI 1.0
import "../component"
FluScrollablePage{
title:"Expander"
title: qsTr("Expander")
FluArea{
FluFrame{
Layout.fillWidth: true
height: layout_column.height+20
paddings: 10
Layout.topMargin: 20
padding: 10
Column{
id:layout_column
spacing: 15
@ -23,11 +22,11 @@ FluScrollablePage{
}
FluExpander{
headerText:"打开一个单选框"
headerText: qsTr("Open a radio box")
Layout.topMargin: 20
Item{
anchors.fill: parent
ColumnLayout{
FluRadioButtons{
spacing: 8
anchors{
top: parent.top
@ -35,17 +34,14 @@ FluScrollablePage{
topMargin: 15
leftMargin: 15
}
Repeater{
id:repeater
property int selecIndex : 0
model: 3
delegate: FluRadioButton{
checked : repeater.selecIndex===index
text:"Radio Button_"+index
clickListener:function() {
repeater.selecIndex = index
}
}
FluRadioButton{
text:"Radio Button_1"
}
FluRadioButton{
text:"Radio Button_2"
}
FluRadioButton{
text:"Radio Button_3"
}
}
}
@ -53,7 +49,7 @@ FluScrollablePage{
FluExpander{
Layout.topMargin: 20
headerText:"打开一个滑动文本框"
headerText: qsTr("Open a sliding text box")
Item{
anchors.fill: parent
Flickable{
@ -61,6 +57,7 @@ FluScrollablePage{
width: parent.width
height: parent.height
contentWidth: width
boundsBehavior: Flickable.StopAtBounds
contentHeight: text_info.height
ScrollBar.vertical: FluScrollBar {}
FluText{
@ -68,7 +65,14 @@ FluScrollablePage{
width: scrollview.width
wrapMode: Text.WrapAnywhere
padding: 14
text:"先帝创业未半而中道崩殂,今天下三分,益州疲弊,此诚危急存亡之秋也。然侍卫之臣不懈于内,忠志之士忘身于外者,盖追先帝之殊遇,欲报之于陛下也。诚宜开张圣听,以光先帝遗德,恢弘志士之气,不宜妄自菲薄,引喻失义,以塞忠谏之路也。宫中府中,俱为一体;陟罚臧否,不宜异同。若有作奸犯科及为忠善者,宜付有司论其刑赏,以昭陛下平明之理,不宜偏私,使内外异法也。侍中、侍郎郭攸之、费祎、董允等,此皆良实,志虑忠纯,是以先帝简拔以遗陛下。愚以为宫中之事,事无大小,悉以咨之,然后施行,必能裨补阙漏,有所广益。将军向宠,性行淑均,晓畅军事,试用于昔日,先帝称之曰能,是以众议举宠为督。愚以为营中之事,悉以咨之,必能使行阵和睦,优劣得所。亲贤臣,远小人,此先汉所以兴隆也;亲小人,远贤臣,此后汉所以倾颓也。先帝在时,每与臣论此事,未尝不叹息痛恨于桓、灵也。侍中、尚书、长史、参军,此悉贞良死节之臣,愿陛下亲之信之,则汉室之隆,可计日而待也。臣本布衣,躬耕于南阳,苟全性命于乱世,不求闻达于诸侯。先帝不以臣卑鄙,猥自枉屈,三顾臣于草庐之中,咨臣以当世之事,由是感激,遂许先帝以驱驰。后值倾覆,受任于败军之际,奉命于危难之间,尔来二十有一年矣。先帝知臣谨慎,故临崩寄臣以大事也。受命以来,夙夜忧叹,恐托付不效,以伤先帝之明;故五月渡泸,深入不毛。今南方已定,兵甲已足,当奖率三军,北定中原,庶竭驽钝,攘除奸凶,兴复汉室,还于旧都。此臣所以报先帝而忠陛下之职分也。至于斟酌损益,进尽忠言,则攸之、祎、允之任也。愿陛下托臣以讨贼兴复之效,不效,则治臣之罪,以告先帝之灵。若无兴德之言,则责攸之、祎、允等之慢,以彰其咎;陛下亦宜自谋,以咨诹善道,察纳雅言,深追先帝遗诏。臣不胜受恩感激。今当远离,临表涕零,不知所言。"
text: qsTr("Permit me to observe: the late emperor was taken from us before he could finish his life`s work, the restoration of Han. Today, the empire is still divided in three, and our very survival is threatened. Yet still the officials at court and the soldiers throughout the realm remain loyal to you, your majesty. Because they remember the late emperor, all of them, and they wish to repay his kindness in service to you. This is the moment to extend your divine influence, to honour the memory of the late Emperor and strengthen the morale of your officers. It is not time to listen to bad advice, or close your ears to the suggestions of loyal men.
The court and the administration are as one. Both must be judged by one standard. Those who are loyal and good must get what they deserve, but so must the evil-doers who break the law. This will demonstrate the justice of your rule. There cannot be one law for the court and another for the administration.
Counselors and attendants like Guo Youzhi, Fei Yi, and Dong Yun are all reliable men, loyal of purpose and pure in motive. The late Emperor selected them for office so that they would serve you after his death.These are the men who should be consulted on all palace affairs. Xiang Chong has proved himself a fine general in battle, and the late Emperor believed in him. That is why the assembly has recommended him for overall command. It will keep the troops happy if he is consulted on all military matters.
Xiang Chong has proved himself a fine general in battle, and the late Emperor believed in him. That is why the assembly has recommended him for overall command. It will keep the troops happy if he is consulted on all military matters.
The emperors of the Western Han chose their courtiers wisely, and their dynasty flourished. The emperors of the Eastern Han chose poorly, and they doomed the empire to ruin. Whenever the late Emperor discussed this problem with me, he lamented the failings of Emperors Huan and Ling. Advisors like Guo Youzhi, Fei Yi, Chen Zhen, Zhang Yi, and Jiang Wan these are all men of great integrity and devotion. I encourage you to trust them, your majesty, if the house of Han is to rise again.
I begin as a common man, farming in my fields in Nanyang, doing what I could to survive in an age of chaos. I never had any interest in making a name for myself as a noble. The late Emperor was not ashamed to visit my cottage and seek my advice. Grateful for his regard, I responded to his appeal and threw myself into his service. Now twenty-one years has passed, the late Emperor always appreciated my caution and, in his final days, entrusted me with his cause.
Since that moment, I have been tormented day and night by the fear that I might let him down. That is why I crossed the Lu river at the height of summer, and entered the wastelands beyond. Now the south has been subdued, and our forces are fully armed.I should lead our soldiers to conquer the northern heartland and attempt to remove the hateful traitors, restore the house of Han, and return it to the former capital.This the way I mean to honor my debt to the late Emperor and fulfill my duty to you. Guo Youzhi, Fei Yi, and Dong Yun are the ones who should be making policy decisions and recommendations.
My only desire is to be permitted to drive out the traitors and restore the Han. If I should let you down, punish my offense and report it to the spirit of the late Emperor. If those three advisors should fail in their duties, then they should be punished for their negligence.Your Majesty, consider your course of action carefully. Seek out good advice, and never forget the late Emperor. I depart now on a long expedition, and I will be forever grateful if you heed my advice. Blinded by my own tears, I know not what I write.")
}
}
}
@ -78,9 +82,9 @@ FluScrollablePage{
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -1
Layout.topMargin: -6
code:'FluExpander{
headerText:"打开一个单选框"
headerText: qsTr("Open a radio box")
Item{
anchors.fill: parent
Flickable{
@ -94,7 +98,7 @@ FluScrollablePage{
width: scrollview.width
wrapMode: Text.WrapAnywhere
padding: 14
text:"先帝创业未半而中道崩殂,今天下三分......""
text: qsTr("Permit me to observe: the late emperor was taken from us before he could finish his life`s work...")
}
}
}

View File

@ -1,23 +1,22 @@
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import QtQuick.Window
import FluentUI
import "qrc:///example/qml/component"
import QtQuick 2.15
import QtQuick.Controls 2.15
import QtQuick.Layouts 1.15
import QtQuick.Window 2.15
import FluentUI 1.0
import "../component"
FluScrollablePage{
title:"FlipView"
title: qsTr("FlipView")
FluArea{
FluFrame{
Layout.fillWidth: true
height: 340
paddings: 10
Layout.topMargin: 20
Layout.preferredHeight: 340
padding: 10
ColumnLayout{
anchors.verticalCenter: parent.verticalCenter
FluText{
text:"水平方向的FlipView"
text: qsTr("Horizontal FlipView")
}
FluFlipView{
Image{
@ -40,7 +39,7 @@ FluScrollablePage{
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -1
Layout.topMargin: -6
code:'FluFlipView{
Image{
source: "qrc:/example/res/image/banner_1.jpg"
@ -61,22 +60,21 @@ FluScrollablePage{
'
}
FluArea{
FluFrame{
Layout.fillWidth: true
height: 340
paddings: 10
padding: 10
Layout.topMargin: 20
ColumnLayout{
anchors.verticalCenter: parent.verticalCenter
FluText{
text:"垂直方向的FlipView"
text: qsTr("Vertical FlipView")
}
FluFlipView{
vertical:true
Image{
source: "qrc:/example/res/image/banner_1.jpg"
asynchronous: true
sourceSize: Qt.size(400,300)
fillMode:Image.PreserveAspectCrop
}
Image{
@ -94,7 +92,7 @@ FluScrollablePage{
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -1
Layout.topMargin: -6
code:'FluFlipView{
vertical:true
Image{

View File

@ -0,0 +1,80 @@
import QtQuick 2.15
import QtQuick.Controls 2.15
import QtQuick.Layouts 1.15
import QtQuick.Window 2.15
import FluentUI 1.0
import "../component"
FluScrollablePage{
title: qsTr("GroupBox")
FluGroupBox {
title: qsTr("CheckBox Group")
ColumnLayout {
spacing: 10
anchors.fill: parent
FluCheckBox { text: qsTr("E-mail") }
FluCheckBox { text: qsTr("Calendar") }
FluCheckBox { text: qsTr("Contacts") }
}
}
FluGroupBox {
title: qsTr("RadioButton Group")
Layout.fillWidth: true
Layout.preferredHeight: 150
Layout.topMargin: 20
FluRadioButtons {
anchors{
verticalCenter: parent.verticalCenter
left: parent.left
}
spacing: 10
disabled: radio_button_switch.checked
FluRadioButton { text: qsTr("E-mail") }
FluRadioButton { text: qsTr("Calendar") }
FluRadioButton { text: qsTr("Contacts") }
}
FluToggleSwitch{
id: radio_button_switch
anchors{
right: parent.right
verticalCenter: parent.verticalCenter
}
text: qsTr("Disabled")
}
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: 4
code:`
FluGroupBox {
title: qsTr("CheckBox Group")
ColumnLayout {
spacing: 10
anchors.fill: parent
FluCheckBox { text: qsTr("E-mail") }
FluCheckBox { text: qsTr("Calendar") }
FluCheckBox { text: qsTr("Contacts") }
}
}
FluGroupBox {
title: qsTr("RadioButton Group")
FluRadioButtons {
spacing: 10
disabled: true // 禁用所有FluRadioButton子组件
manuallyDisabled: true // 是否指定每个FluRadioButton上的disabled选项
FluRadioButton { text: qsTr("E-mail") }
FluRadioButton { text: qsTr("Calendar") }
FluRadioButton { text: qsTr("Contacts") }
}
}
`
}
}

View File

@ -1,33 +1,47 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Window
import QtQuick.Controls
import "qrc:///example/qml/global"
import FluentUI
import QtQuick 2.15
import QtQuick.Layouts 1.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15
import FluentUI 1.0
import "../window"
import "../global"
FluScrollablePage{
pageMode: FluNavigationView.SingleTask
launchMode: FluPageType.SingleTask
animationEnabled: false
header: Item{}
ListModel{
id:model_header
id: model_header
ListElement{
icon:"qrc:/example/res/image/ic_home_github.png"
title:"FluentUI GitHub"
desc:"The latest FluentUI controls and styles for your applications."
url:"https://github.com/zhuzichu520/FluentUI"
icon: "qrc:/example/res/image/ic_home_github.png"
title: qsTr("FluentUI GitHub")
desc: qsTr("The latest FluentUI controls and styles for your applications.")
url: "https://github.com/zhuzichu520/FluentUI"
clicked: function(model){
Qt.openUrlExternally(model.url)
}
}
ListElement{
icon: "qrc:/example/res/image/favicon.ico"
title: qsTr("FluentUI Initializr")
desc: qsTr("FluentUI Initializr is a Tool that helps you create and customize Fluent UI projects with various options.")
url: "https://github.com/zhuzichu520/FluentUI"
clicked: function(model){
fluent_Initializr.showDialog()
}
}
}
Item{
Layout.fillWidth: true
height: 320
Layout.preferredHeight: 320
Image {
id: bg
fillMode:Image.PreserveAspectCrop
anchors.fill: parent
verticalAlignment: Qt.AlignTop
sourceSize: Qt.size(960,640)
source: "qrc:/example/res/image/bg_home_header.png"
}
Rectangle{
@ -47,59 +61,42 @@ FluScrollablePage{
leftMargin: 20
}
}
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:Item{
Component{
id:com_grallery
Item{
id: control
width: 220
height: 240
FluArea{
radius: 8
FluShadow{
radius:5
anchors.fill: item_content
}
FluClip{
id:item_content
radius: [5,5,5,5]
width: 200
height: 220
anchors.centerIn: parent
color: 'transparent'
FluAcrylic {
sourceItem:bg
FluAcrylic{
anchors.fill: parent
color: FluTheme.dark ? Window.active ? Qt.rgba(38/255,44/255,54/255,1) : Qt.rgba(39/255,39/255,39/255,1) : Qt.rgba(251/255,251/255,253/255,1)
rectX: list.x-list.contentX+10+(control.width)*index
rectY: list.y+10
acrylicOpacity:0.8
tintColor: FluTheme.dark ? Qt.rgba(0,0,0,1) : Qt.rgba(1,1,1,1)
target: bg
tintOpacity: FluTheme.dark ? 0.8 : 0.9
blurRadius : 40
targetRect: Qt.rect(list.x-list.contentX+10+(control.width)*index,list.y+10,width,height)
}
Rectangle{
anchors.fill: parent
radius: 8
color:{
if(FluTheme.dark){
if(item_mouse.containsMouse){
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)
}
}
radius: 5
color:FluTheme.itemHoverColor
visible: item_mouse.containsMouse
}
Rectangle{
anchors.fill: parent
radius: 5
color:Qt.rgba(0,0,0,0.0)
visible: !item_mouse.containsMouse
}
ColumnLayout{
Image {
Layout.topMargin: 20
@ -121,6 +118,7 @@ FluScrollablePage{
Layout.leftMargin: 20
color: FluColors.Grey120
font.pixelSize: 12
font.family: FluTextStyle.family
wrapMode: Text.WrapAnywhere
}
}
@ -138,25 +136,46 @@ FluScrollablePage{
id:item_mouse
anchors.fill: parent
hoverEnabled: true
onWheel: (wheel)=>{
if (wheel.angleDelta.y > 0) scrollbar_header.decrease()
else scrollbar_header.increase()
}
onWheel:
(wheel)=>{
if (wheel.angleDelta.y > 0) scrollbar_header.decrease()
else scrollbar_header.increase()
}
onClicked: {
Qt.openUrlExternally(model.url)
model.clicked(model)
}
}
}
}
}
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{
id:com_item
Item{
property string desc: modelData.extra.desc
width: 320
height: 120
FluArea{
FluFrame{
radius: 8
width: 300
height: 100
@ -165,31 +184,23 @@ FluScrollablePage{
anchors.fill: parent
radius: 8
color:{
if(FluTheme.dark){
if(item_mouse.containsMouse){
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)
if(item_mouse.containsMouse){
return FluTheme.itemHoverColor
}
return FluTheme.itemNormalColor
}
}
Image{
id:item_icon
height: 40
width: 40
source: modelData.image
source: modelData.extra.image
anchors{
left: parent.left
leftMargin: 20
verticalCenter: parent.verticalCenter
}
}
FluText{
id:item_title
text:modelData.title
@ -200,10 +211,9 @@ FluScrollablePage{
top: item_icon.top
}
}
FluText{
id:item_desc
text:modelData.desc
text:desc
color:FluColors.Grey120
wrapMode: Text.WrapAnywhere
elide: Text.ElideRight
@ -222,7 +232,7 @@ FluScrollablePage{
height: 12
width: 12
radius: 6
color: FluTheme.primaryColor.dark
color: FluTheme.primaryColor
anchors{
right: parent.right
top: parent.top
@ -252,7 +262,7 @@ FluScrollablePage{
GridView{
Layout.fillWidth: true
implicitHeight: contentHeight
Layout.preferredHeight: contentHeight
cellHeight: 120
cellWidth: 320
model:ItemsOriginal.getRecentlyAddedData()
@ -269,7 +279,7 @@ FluScrollablePage{
GridView{
Layout.fillWidth: true
implicitHeight: contentHeight
Layout.preferredHeight: contentHeight
cellHeight: 120
cellWidth: 320
interactive: false
@ -278,3 +288,4 @@ FluScrollablePage{
}
}

View File

@ -0,0 +1,64 @@
import QtQuick 2.15
import QtQuick.Controls 2.15
import QtQuick.Layouts 1.15
import QtQuick.Window 2.15
import FluentUI 1.0
FluContentPage {
title: qsTr("Icons")
FluTextBox{
id: text_box
placeholderText: qsTr("Please enter a keyword")
anchors{
top: parent.top
}
onTextChanged: {
grid_view.model = FluApp.iconData(text_box.text)
}
}
GridView{
id: grid_view
cellWidth: 110
cellHeight: 110
clip: true
boundsBehavior: GridView.StopAtBounds
model: FluApp.iconData()
ScrollBar.vertical: FluScrollBar {}
anchors{
topMargin: 10
top: text_box.bottom
left: parent.left
right: parent.right
bottom: parent.bottom
}
delegate: Item {
width: 100
height: 100
FluIconButton{
id:item_icon
iconSource: modelData.icon
iconSize: 30
padding: 0
verticalPadding: 0
horizontalPadding: 0
bottomPadding: 30
anchors.fill: parent
onClicked: {
var text ="FluentIcons."+modelData.name;
FluTools.clipText(text)
showSuccess(qsTr("You Copied ")+text)
}
FluText{
width: parent.width
horizontalAlignment: Qt.AlignHCenter
wrapMode: Text.WrapAnywhere
text: modelData.name
anchors.top: parent.top
anchors.topMargin: 60
}
}
}
}
}

View File

@ -0,0 +1,47 @@
import QtQuick 2.15
import QtQuick.Layouts 1.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15
import FluentUI 1.0
import "../component"
FluScrollablePage{
title: qsTr("Image")
FluFrame{
Layout.fillWidth: true
Layout.preferredHeight: 260
padding: 10
Column{
spacing: 15
anchors{
verticalCenter: parent.verticalCenter
left:parent.left
}
FluImage{
width: 384
height: 240
source: "https://gitee.com/zhu-zichu/zhu-zichu/raw/74f075efe2f8d3c3bb7ba3c2259e403450e4050b/image/banner_4.jpg"
onStatusChanged:{
if(status === Image.Error){
showError(qsTr("The image failed to load, please reload"))
}
}
clickErrorListener: function(){
source = "https://gitee.com/zhu-zichu/zhu-zichu/raw/74f075efe2f8d3c3bb7ba3c2259e403450e4050b/image/banner_1.jpg"
}
}
}
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -6
code:'FluImage{
width: 400
height: 300
source: "https://gitee.com/zhu-zichu/zhu-zichu/raw/74f075efe2f8d3c3bb7ba3c2259e403450e4050b/image/banner_1.jpg"
}'
}
}

View File

@ -1,19 +1,22 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Window
import QtQuick.Controls
import FluentUI
import "qrc:///example/qml/component"
import QtQuick 2.15
import QtQuick.Layouts 1.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15
import FluentUI 1.0
import "../component"
FluScrollablePage{
title:"InfoBar"
title: qsTr("InfoBar")
FluArea{
property var info1
property var info2
property var info3
FluFrame{
Layout.fillWidth: true
Layout.topMargin: 20
height: 200
paddings: 10
Layout.preferredHeight: 350
padding: 10
ColumnLayout{
spacing: 14
anchors{
@ -21,40 +24,102 @@ FluScrollablePage{
left: parent.left
}
FluButton{
text:"Info"
text: qsTr("Info")
onClicked: {
showInfo("这是一个Info样式的InfoBar")
showInfo(qsTr("This is an InfoBar in the Info Style"))
}
}
FluButton{
text:"Warning"
text: qsTr("Warning")
onClicked: {
showWarning("这是一个Warning样式的InfoBar")
showWarning(qsTr("This is an InfoBar in the Warning Style"))
}
}
FluButton{
text:"Error"
onClicked: {
showError("这是一个Error样式的InfoBar")
showError(qsTr("This is an InfoBar in the Error Style"))
}
}
FluButton{
text:"Success"
onClicked: {
showSuccess("这是一个Success样式的InfoBar这是一个Success样式的InfoBar")
showSuccess(qsTr("This is an InfoBar in the Success Style"))
}
}
FluButton{
text: qsTr("InfoBar that needs to be turned off manually")
onClicked: {
showInfo(qsTr("This is an InfoBar in the Info Style"),0,qsTr("Manual shutdown is supported"))
}
}
FluText{
wrapMode: Text.WrapAnywhere
width: parent.width
text: qsTr("Manually close the info message box")
}
Row{
spacing: 5
FluButton{
text: (info1 ? qsTr("close '%1'") : qsTr("show '%1")).arg("info1")
onClicked: {
if(info1) {
info1.close()
return
}
info1 = showInfo(qsTr("This is an '%1'").arg("info1"), 0)
}
}
FluButton{
text: (info2 ? qsTr("close '%1'") : qsTr("show '%1")).arg("info2")
onClicked: {
if(info2) {
info2.close()
return
}
info2 = showInfo(qsTr("This is an '%1'").arg("info2"), 0)
}
}
FluButton{
text: (info3 ? qsTr("close '%1'") : qsTr("show '%1")).arg("info3")
onClicked: {
if(info3) {
info3.close()
return
}
info3 = showInfo(qsTr("This is an '%1'").arg("info3"), 0)
}
}
FluButton{
text: qsTr("clear all info")
onClicked: {
clearAllInfo()
}
}
}
FluButton{
text:"Loading"
onClicked: {
showLoading()
}
}
}
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -1
code:'showInfo("这是一个Info样式的InfoBar")
Layout.topMargin: -6
code:`
showInfo(qsTr("This is an InfoBar in the Info Style"))
showWarning("这是一个Warning样式的InfoBar")
showWarning(qsTr("This is an InfoBar in the Warning Style"))
showError("这是一个Error样式的InfoBar")
showError(qsTr("This is an InfoBar in the Error Style"))
showSuccess("这是一个Success样式的InfoBar这是一个Success样式的InfoBar")'
showSuccess(qsTr("This is an InfoBar in the Success Style"))
var info1 = showInfo(qsTr("This is an 'Info1'"), 0)
info1.close()
`
}
}

View File

@ -1,62 +0,0 @@
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import QtQuick.Window
import FluentUI
import "qrc:///example/qml/component"
FluScrollablePage{
title:"MediaPlayer"
onVisibleChanged: {
if(visible){
player.play()
}else{
player.pause()
}
}
FluArea{
Layout.fillWidth: true
height: 320
Layout.topMargin: 20
paddings: 10
ColumnLayout{
anchors{
verticalCenter: parent.verticalCenter
left:parent.left
}
FluMediaPlayer{
id:player
source:"http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4"
}
}
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -1
code:'FluMediaPlayer{
id:player
source:"http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4"
}
'
}
FluArea{
Layout.fillWidth: true
height: 68
Layout.topMargin: 20
paddings: 10
FluButton{
text:"跳转到视频播放器窗口"
anchors.verticalCenter: parent.verticalCenter
onClicked:{
FluApp.navigate("/media",{source:"http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4"})
}
}
}
}

View File

@ -1,55 +1,83 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Window
import QtQuick.Controls
import FluentUI
import "qrc:///example/qml/component"
import QtQuick 2.15
import QtQuick.Layouts 1.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15
import FluentUI 1.0
import "../component"
FluScrollablePage{
title:"Menu"
title: qsTr("Menu")
FluArea{
FluMenu {
id:menu
title: qsTr("File")
Action { text: qsTr("New...")}
Action { text: qsTr("Open...") }
Action { text: qsTr("Save") }
FluMenuSeparator { }
FluMenuItem{
text: qsTr("Quit")
onTriggered: {
showError("Quit")
}
}
FluMenuItem{
text: qsTr("Search")
iconSource: FluentIcons.Zoom
iconSpacing: 3
onTriggered: {
showError(qsTr("Search"))
}
}
Action {
text: qsTr("Disable")
enabled:false
onTriggered: {
showError(qsTr("Disable"))
}
}
FluMenuSeparator { }
Action { text: qsTr("Check");checkable: true;checked: true}
FluMenu{
title: qsTr("Save As...")
Action { text: qsTr("Doc") }
Action { text: qsTr("PDF") }
}
}
FluFrame{
Layout.fillWidth: true
height: 100
paddings: 10
Layout.topMargin: 20
Layout.preferredHeight: 100
padding: 10
Column{
id:layout_column
id: layout_column
spacing: 15
anchors{
verticalCenter: parent.verticalCenter
left:parent.left
}
FluText{
text: qsTr("Menu")
}
FluButton{
text:"左击菜单"
text: qsTr("Show Menu Popup")
Layout.topMargin: 20
onClicked:{
menu.popup()
}
}
FluButton{
text:"右击菜单"
Layout.topMargin: 20
onClicked: {
showSuccess("请按鼠标右击")
}
MouseArea{
anchors.fill: parent
acceptedButtons: Qt.RightButton
onClicked: {
menu.popup()
}
}
}
}
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -1
Layout.topMargin: -6
code:'FluMenu{
id:menu
FluMenuItem:{
@ -69,20 +97,74 @@ menu.popup()
'
}
FluMenu{
id:menu
FluMenuItem{
text:"删除"
onClicked: {
showError("删除")
FluFrame{
Layout.fillWidth: true
Layout.preferredHeight: 100
padding: 10
Layout.topMargin: 20
Column{
spacing: 15
anchors{
verticalCenter: parent.verticalCenter
left:parent.left
}
}
FluMenuItem{
text:"修改"
onClicked: {
showInfo("修改")
FluText{
text: qsTr("MenuBar")
}
FluMenuBar {
id:menu_bar
FluMenu {
title: qsTr("File")
Action { text: qsTr("New...") }
Action { text: qsTr("Open...") }
Action { text: qsTr("Save") }
FluMenuSeparator { }
Action { text: qsTr("Quit") }
Action {
text: qsTr("Disable")
enabled:false
}
FluMenu{
title: qsTr("Save As...")
Action { text: qsTr("Doc") }
Action { text: qsTr("PDF") }
}
}
FluMenu {
title: qsTr("Edit")
Action { text: qsTr("Cut") }
Action { text: qsTr("Copy") }
Action { text: qsTr("Paste") }
}
FluMenu {
title: qsTr("Help")
Action { text: qsTr("About") }
}
}
}
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -6
code:'FluMenuBar{
id:menu
FluMenu:{
title:"File"
Action { text: qsTr("New...") }
}
FluMenu:{
title:"Edit"
Action { text: qsTr("Cut") }
Action { text: qsTr("Copy") }
Action { text: qsTr("Paste") }
}
}
menu.popup()
'
}
}

View File

@ -1,30 +1,30 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Window
import QtQuick.Controls
import FluentUI
import "qrc:///example/qml/component"
import QtQuick 2.15
import QtQuick.Layouts 1.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15
import FluentUI 1.0
import "../component"
FluScrollablePage{
property string password: ""
property var loginPageRegister: registerForWindowResult("/login")
title:"MultiWindow"
title: qsTr("MultiWindow")
FluWindowResultLauncher{
id:loginResultLauncher
path: "/login"
onResult:
(data)=>{
password = data.password
}
Connections{
target: loginPageRegister
function onResult(data)
{
password = data.password
}
}
FluArea{
FluFrame{
Layout.fillWidth: true
height: 86
paddings: 10
Layout.topMargin: 20
Layout.preferredHeight: 86
padding: 10
Column{
spacing: 15
anchors{
@ -32,21 +32,21 @@ FluScrollablePage{
left: parent.left
}
FluText{
text:"<font color='red'>Standard</font>模式窗口,每次都会创建新窗口"
text: qsTr("<font color='red'>Standard</font> mode windowa new window is created every time")
}
FluButton{
text:"点击创建窗口"
text: qsTr("Create Window")
onClicked: {
FluApp.navigate("/standardWindow")
FluRouter.navigate("/standardWindow")
}
}
}
}
FluArea{
FluFrame{
Layout.fillWidth: true
height: 86
paddings: 10
Layout.preferredHeight: 86
padding: 10
Layout.topMargin: 10
Column{
spacing: 15
@ -55,22 +55,22 @@ FluScrollablePage{
left: parent.left
}
FluText{
text:"<font color='red'>SingleTask</font>模式窗口,如果窗口存在,这激活该窗口"
text: qsTr("<font color='red'>SingleTask</font> mode windowIf a window exists, this activates the window")
textFormat: Text.RichText
}
FluButton{
text:"点击创建窗口"
text: qsTr("Create Window")
onClicked: {
FluApp.navigate("/singleTaskWindow")
FluRouter.navigate("/singleTaskWindow")
}
}
}
}
FluArea{
FluFrame{
Layout.fillWidth: true
height: 86
paddings: 10
Layout.preferredHeight: 86
padding: 10
Layout.topMargin: 10
Column{
spacing: 15
@ -79,32 +79,32 @@ FluScrollablePage{
left: parent.left
}
FluText{
text:"<font color='red'>SingleInstance</font>模式窗口,如果窗口存在,则销毁窗口,然后新建窗口"
text: qsTr("<font color='red'>SingleInstance</font> mode windowIf the window exists, destroy the window and create a new window")
}
FluButton{
text:"点击创建窗口"
text: qsTr("Create Window")
onClicked: {
FluApp.navigate("/singleInstanceWindow")
FluRouter.navigate("/singleInstanceWindow")
}
}
}
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -1
Layout.topMargin: -6
code:'FluWindow{
//launchMode: FluWindow.Standard
//launchMode: FluWindow.SingleTask
launchMode: FluWindow.SingleInstance
//launchMode: FluWindowType.Standard
//launchMode: FluWindowType.SingleTask
launchMode: FluWindowType.SingleInstance
}
'
}
FluArea{
FluFrame{
Layout.fillWidth: true
height: 100
paddings: 10
Layout.preferredHeight: 100
padding: 10
Layout.topMargin: 20
Column{
spacing: 15
@ -113,32 +113,32 @@ FluScrollablePage{
left: parent.left
}
FluText{
text:"页面跳转,不携带任何参数"
text: qsTr("Create the window without carrying any parameters")
}
FluButton{
text:"点击跳转"
text: qsTr("Create Window")
onClicked: {
FluApp.navigate("/about")
FluRouter.navigate("/about")
}
}
}
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -1
Layout.topMargin: -6
code:'FluButton{
text:"点击跳转"
text: qsTr("Create Window")
onClicked: {
FluApp.navigate("/about")
FluRouter.navigate("/about")
}
}
'
}
FluArea{
FluFrame{
Layout.fillWidth: true
height: 130
paddings: 10
Layout.preferredHeight: 130
padding: 10
Layout.topMargin: 20
Column{
@ -148,36 +148,35 @@ FluScrollablePage{
left: parent.left
}
FluText{
text:"页面跳转,并携带参数用户名:zhuzichu"
text: qsTr("Create a window with the parameter username: zhuzichu")
}
FluButton{
text:"点击跳转到登录"
text: qsTr("Create Window")
onClicked: {
loginPageRegister.launch({username:"zhuzichu"})
loginResultLauncher.launch({username:"zhuzichu"})
}
}
FluText{
text:"登录窗口返回过来的密码->"+password
text:qsTr("Login Window Returned Password - >")+password
}
}
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -1
code:'property var loginPageRegister: registerForWindowResult("/login")
Connections{
target: loginPageRegister
function onResult(data)
{
password = data.password
}
Layout.topMargin: -6
code:'FluWindowResultLauncher{
id:loginResultLauncher
path: "/login"
onResult:
(data)=>{
password = data.password
}
}
FluButton{
text:"点击跳转"
text: qsTr("Create Window")
onClicked: {
loginPageRegister.launch({username:"zhuzichu"})
loginResultLauncher.launch({username:"zhuzichu"})
}
}
'

View File

@ -0,0 +1,560 @@
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 example 1.0
import "../component"
FluContentPage{
id:root
title: qsTr("Network")
NetworkCallable{
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
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 = ""
Network.get("https://httpbingo.org/get")
.addQuery("name","孙悟空")
.addQuery("age",500)
.addQuery("address","花果山水帘洞")
.bind(root)
.go(callable)
}
}
FluButton{
implicitWidth: parent.width
implicitHeight: 36
text: "Head"
onClicked: {
text_info.text = ""
Network.head("https://httpbingo.org/head")
.addQuery("name","孙悟空")
.addQuery("age",500)
.addQuery("address","花果山水帘洞")
.bind(root)
.go(callable)
}
}
FluButton{
implicitWidth: parent.width
implicitHeight: 36
text: "Post Body"
onClicked: {
text_info.text = ""
Network.postBody("https://httpbingo.org/post")
.setBody("花果山水帘洞美猴王齐天大圣孙悟空")
.bind(root)
.go(callable)
}
}
FluButton{
implicitWidth: parent.width
implicitHeight: 36
text: "Post Form"
onClicked: {
text_info.text = ""
Network.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 = ""
Network.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 = ""
Network.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 = ""
Network.putBody("https://httpbingo.org/put")
.setBody("花果山水帘洞美猴王齐天大圣孙悟空")
.bind(root)
.go(callable)
}
}
FluButton{
implicitWidth: parent.width
implicitHeight: 36
text: "Put Form"
onClicked: {
text_info.text = ""
Network.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 = ""
Network.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 = ""
Network.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 = ""
Network.patchBody("https://httpbingo.org/patch")
.setBody("花果山水帘洞美猴王齐天大圣孙悟空")
.bind(root)
.go(callable)
}
}
FluButton{
implicitWidth: parent.width
implicitHeight: 36
text: "Patch Form"
onClicked: {
text_info.text = ""
Network.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 = ""
Network.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 = ""
Network.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 = ""
Network.deleteBody("https://httpbingo.org/delete")
.setBody("花果山水帘洞美猴王齐天大圣孙悟空")
.bind(root)
.go(callable)
}
}
FluButton{
implicitWidth: parent.width
implicitHeight: 36
text: "Delete Form"
onClicked: {
text_info.text = ""
Network.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 = ""
Network.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 = ""
Network.deleteJsonArray("https://httpbingo.org/delete")
.add("name","孙悟空")
.add("age",500)
.add("address","花果山水帘洞")
.bind(root)
.go(callable)
}
}
FluButton{
implicitWidth: parent.width
implicitHeight: 36
text: "Open Log"
onClicked: {
text_info.text = ""
Network.postJson("https://httpbingo.org/post")
.add("name","孙悟空")
.add("age",500)
.add("address","花果山水帘洞")
.openLog(true)
.bind(root)
.go(callable)
}
}
FluButton{
implicitWidth: parent.width
implicitHeight: 36
text: "Custom Header"
onClicked: {
text_info.text = ""
Network.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 = ""
Network.postJson("https://httpbingo.org/post")
.setCacheMode(NetworkType.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 = ""
Network.postJson("https://httpbingo.org/post")
.setCacheMode(NetworkType.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 = ""
Network.postJson("https://httpbingo.org/post")
.setCacheMode(NetworkType.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 = ""
Network.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){
Network.get("http://vjs.zencdn.net/v/oceans.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){
Network.get("http://vjs.zencdn.net/v/oceans.mp4")
.toDownload(path,true)
.bind(root)
.go(callable_breakpoint_download_file)
})
}
}
}
}
NetworkCallable{
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
}
}
NetworkCallable{
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
}
}
NetworkCallable{
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: {
Network.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]+"/oceans.mp4"
fileMode: FileDialog.SaveFile
onAccepted: {
folder_dialog.onSelectListener(FluTools.toLocalPath(folder_dialog.currentFile))
}
function showDialog(listener){
folder_dialog.onSelectListener = listener
folder_dialog.open()
}
}
FluFrame{
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
}
}
}
}

View File

@ -0,0 +1,26 @@
import QtQuick 2.15
import QtQuick.Layouts 1.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15
import FluentUI 1.0
import example 1.0
import "../component"
FluContentPage{
title: qsTr("OpenGL")
FluFrame{
anchors.fill: parent
OpenGLItem{
anchors.fill: parent
SequentialAnimation on t {
NumberAnimation { to: 1; duration: 2500; easing.type: Easing.InQuad }
NumberAnimation { to: 0; duration: 2500; easing.type: Easing.OutQuad }
loops: Animation.Infinite
running: true
}
}
}
}

View File

@ -0,0 +1,48 @@
import QtQuick 2.15
import QtQuick.Layouts 1.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15
import "../component"
import FluentUI 1.0
FluScrollablePage{
title: qsTr("Pagination")
FluFrame{
Layout.fillWidth: true
Layout.preferredHeight: 200
padding: 10
ColumnLayout{
spacing: 20
anchors.verticalCenter: parent.verticalCenter
FluPagination{
pageCurrent: 1
pageButtonCount: 5
itemCount: 5000
}
FluPagination{
pageCurrent: 2
itemCount: 5000
pageButtonCount: 7
}
FluPagination{
pageCurrent: 3
itemCount: 5000
pageButtonCount: 9
}
}
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -6
code:'FluPagination{
pageCurrent: 1
itemCount: 1000
pageButtonCount: 9
}'
}
}

View File

@ -1,80 +1,79 @@
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import QtQuick.Window
import FluentUI
import "qrc:///example/qml/component"
import QtQuick 2.15
import QtQuick.Controls 2.15
import QtQuick.Layouts 1.15
import QtQuick.Window 2.15
import FluentUI 1.0
import "../component"
FluScrollablePage{
title:"Pivot"
title: qsTr("Pivot")
FluArea{
FluFrame{
Layout.fillWidth: true
Layout.topMargin: 20
height: 400
paddings: 10
Layout.preferredHeight: 400
padding: 10
FluPivot{
anchors.fill: parent
currentIndex: 2
FluPivotItem{
title:"All"
title: qsTr("All")
contentItem:FluText{
text:"All emails go here."
text: qsTr("All emails go here.")
}
}
FluPivotItem{
title:"Unread"
contentItem:FluText{
text:"Unread emails go here."
title: qsTr("Unread")
contentItem: FluText{
text: qsTr("Unread emails go here.")
}
}
FluPivotItem{
title:"Flagged"
contentItem:FluText{
text:"Flagged emails go here."
title: qsTr("Flagged")
contentItem: FluText{
text: qsTr("Flagged emails go here.")
}
}
FluPivotItem{
title:"Urgent"
contentItem:FluText{
text:"Urgent emails go here."
title: qsTr("Urgent")
contentItem: FluText{
text: qsTr("Urgent emails go here.")
}
}
}
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -1
Layout.topMargin: -6
code:'FluPivot{
anchors.fill: parent
FluPivotItem:{
text:"All"
text: qsTr("All")
contentItem: FluText{
text:"All emails go here."
text: qsTr("All emails go here.")
}
}
FluPivotItem:{
text:"Unread"
text: qsTr("Unread")
contentItem: FluText{
text:"Unread emails go here."
text: qsTr("Unread emails go here.")
}
}
FluPivotItem:{
text:"Flagged"
text: qsTr("Flagged")
contentItem: FluText{
text:"Flagged emails go here."
text: qsTr("Flagged emails go here.")
}
}
FluPivotItem:{
text:"Urgent"
text: qsTr("Urgent")
contentItem: FluText{
text:"Urgent emails go here."
text: qsTr("Urgent emails go here.")
}
}
}
'
}
}

View File

@ -1,66 +1,102 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Window
import QtQuick.Controls
import FluentUI
import "qrc:///example/qml/component"
import QtQuick 2.15
import QtQuick.Layouts 1.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15
import FluentUI 1.0
import "../component"
FluScrollablePage{
title:"Progress"
title: qsTr("Progress")
FluArea{
FluFrame{
Layout.fillWidth: true
Layout.topMargin: 20
height: 260
paddings: 10
Layout.preferredHeight: 130
padding: 10
ColumnLayout{
spacing: 20
spacing: 10
anchors{
verticalCenter: parent.verticalCenter
left: parent.left
}
FluText{
text: "indeterminate = true"
}
FluProgressBar{
}
FluProgressRing{
}
}
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -6
code:'FluProgressBar{
}
FluProgressRing{
}
'
}
FluFrame{
Layout.fillWidth: true
Layout.topMargin: 20
Layout.preferredHeight: 286
padding: 10
ColumnLayout{
spacing: 10
anchors{
verticalCenter: parent.verticalCenter
left: parent.left
}
FluText{
text: "indeterminate = false"
}
FluProgressBar{
id:progress_bar
indeterminate: false
value:slider.value/100
Layout.topMargin: 10
}
FluProgressBar{
indeterminate: false
value:slider.value/100
progressVisible: true
Layout.topMargin: 10
}
FluProgressRing{
id:progress_ring
indeterminate: false
value: slider.value/100
Layout.topMargin: 10
}
FluProgressRing{
progressVisible: true
indeterminate: false
value: slider.value/100
}
FluSlider{
value:50
onValueChanged:{
progress_bar.progress = value/100
progress_ring.progress = value/100
id:slider
Component.onCompleted: {
value = 50
}
}
}
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -1
Layout.topMargin: -6
code:'FluProgressBar{
}
FluProgressRing{
}
FluProgressBar{
indeterminate: false
}
FluProgressRing{
indeterminate: false
}'
progressVisible: true
}
'
}
}

View File

@ -0,0 +1,101 @@
import QtQuick 2.15
import QtQuick.Controls 2.15
import QtQuick.Layouts 1.15
import QtQuick.Window 2.15
import FluentUI 1.0
import "../component"
FluScrollablePage{
title: qsTr("QRCode")
FluQRCode{
id:qrcode
size:slider_size.value
text:text_box.text
color:color_picker.current
bgColor: bgcolor_picker.current
margins:slider_margins.value
Layout.preferredWidth: size
Layout.preferredHeight: size
}
RowLayout{
spacing: 10
Layout.topMargin: 20
FluText{
text:"text:"
Layout.alignment: Qt.AlignVCenter
}
FluTextBox{
id:text_box
text:"会磨刀的小猪"
Layout.preferredWidth: 240
}
}
RowLayout{
spacing: 10
Layout.topMargin: 10
FluText{
text:"color:"
Layout.alignment: Qt.AlignVCenter
}
FluColorPicker{
id:color_picker
current: Qt.rgba(0,0,0,1)
}
}
RowLayout{
spacing: 10
Layout.topMargin: 10
FluText{
text:"bgColor:"
Layout.alignment: Qt.AlignVCenter
}
FluColorPicker{
id:bgcolor_picker
current: Qt.rgba(1,1,1,1)
}
}
RowLayout{
spacing: 10
FluText{
text:"margins:"
Layout.alignment: Qt.AlignVCenter
}
FluSlider{
id:slider_margins
from:0
to:80
value: 0
}
}
RowLayout{
spacing: 10
FluText{
text:"size:"
Layout.alignment: Qt.AlignVCenter
}
FluSlider{
id:slider_size
from:120
to:260
value: 120
}
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: 20
code:'FluQRCode{
color:"red"
text:"会磨刀的小猪"
size:100
}'
}
}

View File

@ -0,0 +1,201 @@
import QtQuick 2.15
import QtQuick.Layouts 1.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15
import FluentUI 1.0
import "../component"
FluScrollablePage{
title: qsTr("RadioButton")
FluFrame{
Layout.fillWidth: true
Layout.preferredHeight: 68
padding: 10
Row{
spacing: 30
anchors.verticalCenter: parent.verticalCenter
FluRadioButton{
disabled: radio_button_switch.checked
}
FluRadioButton{
disabled: radio_button_switch.checked
text: qsTr("Right")
}
FluRadioButton{
disabled: radio_button_switch.checked
text: qsTr("Left")
textRight: false
}
}
FluToggleSwitch{
id: radio_button_switch
anchors{
right: parent.right
verticalCenter: parent.verticalCenter
}
text: qsTr("Disabled")
}
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -6
code:'FluRadioButton{
text:"Text"
}'
}
FluFrame{
Layout.fillWidth: true
Layout.preferredHeight: 100
padding: 10
Layout.topMargin: 20
FluRadioButtons{
spacing: 8
disabled: radio_button_switch2.checked
anchors.verticalCenter: parent.verticalCenter
anchors{
verticalCenter: parent.verticalCenter
left: parent.left
}
currentIndex: 1
FluRadioButton{
text: qsTr("Radio Button_1")
}
FluRadioButton{
text: qsTr("Radio Button_2")
}
FluRadioButton{
text: qsTr("Radio Button_3")
}
}
FluToggleSwitch{
id: radio_button_switch2
anchors{
right: parent.right
verticalCenter: parent.verticalCenter
}
text: qsTr("Disabled")
}
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -6
code:'FluRadioButtons{
spacing: 8
FluRadioButton{
text:"Radio Button_1"
}
FluRadioButton{
text:"Radio Button_2"
}
FluRadioButton{
text:"Radio Button_3"
}
}'
}
FluFrame{
Layout.fillWidth: true
Layout.preferredHeight: 60
padding: 10
Layout.topMargin: 20
FluRadioButtons{
spacing: 8
anchors.verticalCenter: parent.verticalCenter
anchors{
verticalCenter: parent.verticalCenter
left: parent.left
}
disabled: radio_button_switch3.checked
orientation: Qt.Horizontal
currentIndex: 1
FluRadioButton{
text: qsTr("Radio Button_1")
}
FluRadioButton{
text: qsTr("Radio Button_2")
}
FluRadioButton{
text: qsTr("Radio Button_3")
}
}
FluToggleSwitch{
id: radio_button_switch3
anchors{
right: parent.right
verticalCenter: parent.verticalCenter
}
text: qsTr("Disabled")
}
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -6
code:'FluRadioButtons{
spacing: 8
orientation: Qt.Horizontal
FluRadioButton{
text:"Radio Button_1"
}
FluRadioButton{
text:"Radio Button_2"
}
FluRadioButton{
text:"Radio Button_3"
}
}'
}
FluFrame{
Layout.fillWidth: true
Layout.preferredHeight: 100
padding: 10
Layout.topMargin: 20
FluRadioButtons{
spacing: 8
anchors.verticalCenter: parent.verticalCenter
anchors{
verticalCenter: parent.verticalCenter
left: parent.left
}
disabled: radio_button_switch4.checked
currentIndex: -1
FluCheckBox{
text: qsTr("Radio Button_1")
}
FluCheckBox{
text: qsTr("Radio Button_2")
}
FluCheckBox{
text: qsTr("Radio Button_3")
}
}
FluToggleSwitch{
id: radio_button_switch4
anchors{
right: parent.right
verticalCenter: parent.verticalCenter
}
text: qsTr("Disabled")
}
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -6
code:'FluRadioButtons{
spacing: 8
FluCheckBox{
text:"Radio Button_1"
}
FluCheckBox{
text:"Radio Button_2"
}
FluCheckBox{
text:"Radio Button_3"
}
}'
}
}

View File

@ -1,19 +1,18 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Window
import QtQuick.Controls
import FluentUI
import "qrc:///example/qml/component"
import QtQuick 2.15
import QtQuick.Layouts 1.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15
import FluentUI 1.0
import "../component"
FluScrollablePage {
title: "RatingControl"
title: qsTr("RatingControl")
FluArea {
FluFrame {
Layout.fillWidth: true
height: 100
paddings: 10
Layout.topMargin: 20
Layout.preferredHeight: 100
padding: 10
Column {
spacing: 10
@ -27,7 +26,7 @@ FluScrollablePage {
CodeExpander {
Layout.fillWidth: true
Layout.topMargin: -1
Layout.topMargin: -6
code: 'FluRatingControl{
}'

View File

@ -1,27 +1,25 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Controls
import QtQuick.Window
import FluentUI
import "qrc:///example/qml/component"
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"
FluScrollablePage{
title:"Rectangle"
title: qsTr("Rectangle")
FluArea{
FluFrame{
Layout.fillWidth: true
Layout.topMargin: 20
height: 480
paddings: 10
Layout.preferredHeight: 80
padding: 10
Column{
spacing: 15
anchors{
verticalCenter: parent.verticalCenter
left: parent.left
verticalCenter: parent.verticalCenter
}
RowLayout{
Layout.topMargin: 20
FluRectangle{
@ -61,87 +59,15 @@ FluScrollablePage{
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{
Layout.fillWidth: true
Layout.topMargin: -1
Layout.topMargin: -6
code:'FluRectangle{
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)
}
}'
}
}

View File

@ -1,12 +1,14 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Window
import QtQuick.Controls
import FluentUI
import "qrc:///example/qml/component"
import QtQuick 2.15
import QtQuick.Layouts 1.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15
import FluentUI 1.0
import "../component"
FluRemoteLoader{
property int pageMode: FluNavigationView.Standard
property string url: ''
source: "https://zhu-zichu.gitee.io/T_RemoteLoader.qml"
FluPage{
launchMode: FluPageType.SingleTop
FluRemoteLoader{
anchors.fill: parent
source: "https://zhu-zichu.gitee.io/Qt_174_RemoteLoader.qml"
}
}

View File

@ -1,35 +1,110 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Window
import QtQuick.Controls
import FluentUI
import "qrc:///example/qml/global"
import "qrc:///example/qml/component"
import QtQuick 2.15
import QtQuick.Layouts 1.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15
import FluentUI 1.0
import "../component"
import "../global"
FluScrollablePage{
title:"Settings"
title: qsTr("Settings")
FluArea{
FluEvent{
name: "checkUpdateFinish"
onTriggered: {
btn_checkupdate.loading = false
}
}
FluFrame{
Layout.fillWidth: true
Layout.topMargin: 20
height: 136
paddings: 10
Layout.preferredHeight: 60
padding: 10
Row{
spacing: 20
anchors.verticalCenter: parent.verticalCenter
FluText{
text: "%1 v%2".arg(qsTr("Current Version")).arg(AppInfo.version)
font: FluTextStyle.Body
anchors.verticalCenter: parent.verticalCenter
}
FluLoadingButton{
id: btn_checkupdate
text: qsTr("Check for Updates")
anchors.verticalCenter: parent.verticalCenter
onClicked: {
loading = true
FluEventBus.post("checkUpdate")
}
}
}
}
FluFrame{
Layout.fillWidth: true
Layout.topMargin: 20
height: 50
padding: 10
FluCheckBox{
text: qsTr("Use System AppBar")
checked: FluApp.useSystemAppBar
anchors.verticalCenter: parent.verticalCenter
onClicked: {
FluApp.useSystemAppBar = !FluApp.useSystemAppBar
dialog_restart.open()
}
}
}
FluFrame{
Layout.fillWidth: true
Layout.topMargin: 20
height: 50
padding: 10
FluCheckBox{
text:qsTr("Fits AppBar Windows")
checked: window.fitsAppBarWindows
anchors.verticalCenter: parent.verticalCenter
onClicked: {
window.fitsAppBarWindows = !window.fitsAppBarWindows
}
}
}
FluContentDialog{
id: dialog_restart
title: qsTr("Friendly Reminder")
message: qsTr("This action requires a restart of the program to take effect, is it restarted?")
buttonFlags: FluContentDialogType.NegativeButton | FluContentDialogType.PositiveButton
negativeText: qsTr("Cancel")
positiveText: qsTr("OK")
onPositiveClicked: {
FluRouter.exit(931)
}
}
FluFrame{
Layout.fillWidth: true
Layout.topMargin: 20
height: 128
padding: 10
ColumnLayout{
spacing: 10
spacing: 5
anchors{
top: parent.top
left: parent.left
}
FluText{
text:lang.dark_mode
text: qsTr("Dark Mode")
font: FluTextStyle.BodyStrong
Layout.bottomMargin: 4
}
Repeater{
model: [{title:"System",mode:FluDarkMode.System},{title:"Light",mode:FluDarkMode.Light},{title:"Dark",mode:FluDarkMode.Dark}]
delegate: FluRadioButton{
model: [{title:qsTr("System"),mode:FluThemeType.System},{title:qsTr("Light"),mode:FluThemeType.Light},{title:qsTr("Dark"),mode:FluThemeType.Dark}]
delegate: FluRadioButton{
checked : FluTheme.darkMode === modelData.mode
text:modelData.title
clickListener:function(){
@ -40,42 +115,51 @@ FluScrollablePage{
}
}
FluArea{
FluFrame{
Layout.fillWidth: true
Layout.topMargin: 20
height: 168
paddings: 10
height: 160
padding: 10
ColumnLayout{
spacing: 10
spacing: 5
anchors{
top: parent.top
left: parent.left
}
FluText{
text:lang.navigation_view_display_mode
text:qsTr("Navigation View Display Mode")
font: FluTextStyle.BodyStrong
Layout.bottomMargin: 4
}
Repeater{
model: [{title:"Open",mode:FluNavigationView.Open},{title:"Compact",mode:FluNavigationView.Compact},{title:"Minimal",mode:FluNavigationView.Minimal},{title:"Auto",mode:FluNavigationView.Auto}]
model: [{title:qsTr("Open"),mode:FluNavigationViewType.Open},{title:qsTr("Compact"),mode:FluNavigationViewType.Compact},{title:qsTr("Minimal"),mode:FluNavigationViewType.Minimal},{title:qsTr("Auto"),mode:FluNavigationViewType.Auto}]
delegate: FluRadioButton{
checked : MainEvent.displayMode===modelData.mode
text:modelData.title
text: modelData.title
checked: GlobalModel.displayMode === modelData.mode
clickListener:function(){
MainEvent.displayMode = modelData.mode
GlobalModel.displayMode = modelData.mode
}
}
}
}
}
FluArea{
ListModel{
id:model_language
ListElement{
name:"en"
}
ListElement{
name:"zh"
}
}
FluFrame{
Layout.fillWidth: true
Layout.topMargin: 20
height: 80
paddings: 10
padding: 10
ColumnLayout{
spacing: 10
@ -83,27 +167,25 @@ FluScrollablePage{
top: parent.top
left: parent.left
}
FluText{
text:lang.locale
text:qsTr("Language")
font: FluTextStyle.BodyStrong
Layout.bottomMargin: 4
}
Flow{
spacing: 5
Repeater{
model: ["Zh","En"]
model: TranslateHelper.languages
delegate: FluRadioButton{
checked: appInfo.lang.objectName === modelData
checked: TranslateHelper.current === modelData
text:modelData
clickListener:function(){
appInfo.changeLang(modelData)
TranslateHelper.current = modelData
dialog_restart.open()
}
}
}
}
}
}
}

View File

@ -0,0 +1,90 @@
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"
FluScrollablePage{
title: qsTr("Sheet")
FluSheet{
id:sheet
title: qsTr("Title")
FluText{
text: qsTr("Some contents...\nSome contents...\nSome contents...")
anchors{
left: parent.left
leftMargin: 10
}
}
}
FluFrame{
Layout.fillWidth: true
Layout.preferredHeight: 280
padding: 10
Column{
anchors.centerIn: parent
spacing: 10
Row{
spacing: 10
FluButton{
width: 80
height: 30
text: qsTr("top")
onClicked: {
sheet.open(FluSheetType.Top)
}
}
FluButton{
width: 80
height: 30
text: qsTr("right")
onClicked: {
sheet.open(FluSheetType.Right)
}
}
}
Row{
spacing: 10
FluButton{
width: 80
height: 30
text: qsTr("bottom")
onClicked: {
sheet.open(FluSheetType.Bottom)
}
}
FluButton{
width: 80
height: 30
text: qsTr("left")
onClicked: {
sheet.open(FluSheetType.Left)
}
}
}
}
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -6
code:'FluSheet{
id:sheet
title: qsTr("Title")
FluText{
text: qsTr("Some contents...")
anchors{
left: parent.left
leftMargin: 10
}
}
}
sheet.open(FluSheetType.Bottom)
'
}
}

View File

@ -0,0 +1,42 @@
import QtQuick 2.15
import QtQuick.Layouts 1.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15
import FluentUI 1.0
import "../component"
FluScrollablePage{
title: qsTr("ShortcutPicker")
FluFrame{
Layout.fillWidth: true
Layout.preferredHeight: childrenRect.height
ColumnLayout{
anchors.verticalCenter: parent.verticalCenter
Item{
Layout.preferredHeight: 15
}
Repeater{
model: FluApp.launcher.hotkeys.children
delegate: FluShortcutPicker{
text: model.name
syncHotkey: FluApp.launcher.hotkeys.children[index]
Layout.leftMargin: 15
}
}
Item{
Layout.preferredHeight: 15
}
}
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -6
code:'FluShortcutPicker{
}'
}
}

View File

@ -1,54 +1,59 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Window
import QtQuick.Controls
import "qrc:///example/qml/component"
import FluentUI
import QtQuick 2.15
import QtQuick.Layouts 1.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15
import FluentUI 1.0
import "../component"
FluScrollablePage{
title:"Slider"
title: qsTr("Slider")
FluArea{
FluFrame{
Layout.fillWidth: true
height: 100
paddings: 10
Layout.topMargin: 20
FluSlider{
value: 50
anchors.verticalCenter: parent.verticalCenter
Layout.preferredHeight: 200
padding: 10
Row{
spacing: 30
FluSlider{
}
FluSlider{
orientation: Qt.Vertical
anchors.verticalCenter: parent.verticalCenter
}
}
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -1
Layout.topMargin: -6
code:'FluSlider{
value:50
}'
}
FluArea{
FluFrame{
Layout.fillWidth: true
height: 200
paddings: 10
Layout.preferredHeight: 200
Layout.topMargin: 20
FluSlider{
value: 50
vertical:true
anchors.left: parent.left
anchors.leftMargin: 20
anchors.verticalCenter: parent.verticalCenter
padding: 10
Row{
spacing: 30
FluRangeSlider{
}
FluRangeSlider{
orientation: Qt.Vertical
anchors.verticalCenter: parent.verticalCenter
}
}
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -1
code:'FluSlider{
vertical:true
value:50
Layout.topMargin: -6
code:'FluRangeSlider{
orientation: Qt.Vertical
}'
}
}

View File

@ -0,0 +1,83 @@
import QtQuick 2.15
import QtQuick.Layouts 1.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15
import FluentUI 1.0
import "../component"
FluContentPage{
title: qsTr("SplitLayout")
RowLayout{
id:layout_dropdown
anchors{
top: parent.top
}
FluText{
text:"orientation:"
}
FluDropDownButton{
id:btn_orientation
Layout.preferredWidth: 120
text:"Horizontal"
FluMenuItem{
text:"Horizontal"
onClicked: {
btn_orientation.text = text
split_layout.orientation = Qt.Horizontal
}
}
FluMenuItem{
text:"Vertical"
onClicked: {
btn_orientation.text = text
split_layout.orientation = Qt.Vertical
}
}
}
}
FluSplitLayout {
id:split_layout
anchors{
top: layout_dropdown.bottom
left: parent.left
right: parent.right
bottom: parent.bottom
topMargin: 8
}
orientation: Qt.Horizontal
Item {
clip: true
implicitWidth: 200
implicitHeight: 200
SplitView.maximumWidth: 400
SplitView.maximumHeight: 400
FluText {
text: "Page 1"
anchors.centerIn: parent
}
}
Item {
clip: true
id: centerItem
SplitView.minimumWidth: 50
SplitView.minimumHeight: 50
SplitView.fillWidth: true
SplitView.fillHeight: true
FluText {
text: "Page 2"
anchors.centerIn: parent
}
}
Item {
clip: true
implicitWidth: 200
implicitHeight: 200
FluText {
text: "Page 3"
anchors.centerIn: parent
}
}
}
}

View File

@ -0,0 +1,56 @@
import QtQuick 2.15
import QtQuick.Layouts 1.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15
import FluentUI 1.0
import "../component"
FluContentPage{
title: qsTr("StaggeredLayout")
property var colors : [FluColors.Yellow,FluColors.Orange,FluColors.Red,FluColors.Magenta,FluColors.Purple,FluColors.Blue,FluColors.Teal,FluColors.Green]
ListModel{
id:list_model
Component.onCompleted: {
for(var i=0;i<=100;i++){
var item = {}
item.color = colors[rand(0,7)]
item.height = rand(100,300)
append(item)
}
}
}
Flickable{
id: scroll
anchors.fill: parent
boundsBehavior:Flickable.StopAtBounds
contentHeight: staggered_view.implicitHeight
clip: true
ScrollBar.vertical: FluScrollBar {}
FluStaggeredLayout{
id:staggered_view
width: parent.width
itemWidth: 160
model:list_model
delegate: Rectangle{
height: model.height
color:model.color.normal
FluText{
color:"#FFFFFF"
text:model.index
font: FluTextStyle.Title
anchors.centerIn: parent
}
}
}
}
function rand(minNum, maxNum){
return parseInt(Math.random() * (maxNum - minNum + 1) + minNum, 10);
}
}

View File

@ -0,0 +1,85 @@
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"
FluScrollablePage{
title: qsTr("StatusLayout")
FluFrame{
id:layout_actions
Layout.fillWidth: true
Layout.preferredHeight: 50
padding: 10
RowLayout{
spacing: 14
FluDropDownButton{
id:btn_status_mode
Layout.preferredWidth: 140
text:"Loading"
FluMenuItem{
text:"Loading"
onClicked: {
btn_status_mode.text = text
status_view.statusMode = FluStatusLayoutType.Loading
}
}
FluMenuItem{
text:"Empty"
onClicked: {
btn_status_mode.text = text
status_view.statusMode = FluStatusLayoutType.Empty
}
}
FluMenuItem{
text:"Error"
onClicked: {
btn_status_mode.text = text
status_view.statusMode = FluStatusLayoutType.Error
}
}
FluMenuItem{
text:"Success"
onClicked: {
btn_status_mode.text = text
status_view.statusMode = FluStatusLayoutType.Success
}
}
}
}
}
FluFrame{
Layout.fillWidth: true
Layout.topMargin: 10
Layout.preferredHeight: 380
padding: 10
FluStatusLayout{
id:status_view
anchors.fill: parent
onErrorClicked:{
status_view.statusMode = FluStatusLayoutType.Loading
}
Rectangle {
anchors.fill: parent
color:FluTheme.primaryColor
}
}
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -6
code:'FluStatusLayout{
anchors.fill: parent
statusMode: FluStatusLayoutType.Loading
Rectangle{
anchors.fill: parent
color:FluTheme.primaryColor
}
}'
}
}

View File

@ -1,88 +0,0 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Controls
import QtQuick.Window
import FluentUI
import "qrc:///example/qml/component"
FluScrollablePage{
title:"StatusView"
FluArea{
id:layout_actions
Layout.fillWidth: true
Layout.topMargin: 20
height: 50
paddings: 10
RowLayout{
spacing: 14
FluDropDownButton{
id:btn_status_mode
Layout.preferredWidth: 140
text:"Loading"
items:[
FluMenuItem{
text:"Loading"
onClicked: {
btn_status_mode.text = text
status_view.statusMode = FluStatusView.Loading
}
},
FluMenuItem{
text:"Empty"
onClicked: {
btn_status_mode.text = text
status_view.statusMode = FluStatusView.Empty
}
},
FluMenuItem{
text:"Error"
onClicked: {
btn_status_mode.text = text
status_view.statusMode = FluStatusView.Error
}
},
FluMenuItem{
text:"Success"
onClicked: {
btn_status_mode.text = text
status_view.statusMode = FluStatusView.Success
}
}
]
}
}
}
FluArea{
Layout.fillWidth: true
Layout.topMargin: 10
height: 380
paddings: 10
FluStatusView{
id:status_view
anchors.fill: parent
onErrorClicked:{
showError("点击重新加载")
}
Rectangle {
anchors.fill: parent
color:FluTheme.primaryColor.dark
}
}
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -1
code:'FluStatusView{
anchors.fill: parent
statusMode: FluStatusView.Loading
Rectangle{
anchors.fill: parent
color:FluTheme.primaryColor.dark
}
}'
}
}

View File

@ -1,26 +1,26 @@
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import QtQuick.Window
import FluentUI
import "qrc:///example/qml/component"
import QtQuick 2.15
import QtQuick.Controls 2.15
import QtQuick.Layouts 1.15
import QtQuick.Window 2.15
import FluentUI 1.0
import "../component"
FluScrollablePage{
property var colors : [FluColors.Yellow,FluColors.Orange,FluColors.Red,FluColors.Magenta,FluColors.Purple,FluColors.Blue,FluColors.Teal,FluColors.Green]
title:"TabView"
title: qsTr("TabView")
Component{
id:com_page
Rectangle{
anchors.fill: parent
color: argument
color: argument.normal
}
}
function newTab(){
tab_view.appendTab("qrc:/example/res/image/favicon.ico","Document "+tab_view.count(),com_page,colors[Math.floor(Math.random() * 8)].dark)
tab_view.appendTab("qrc:/example/res/image/favicon.ico",qsTr("Document ")+tab_view.count(),com_page,colors[Math.floor(Math.random() * 8)])
}
Component.onCompleted: {
@ -29,77 +29,72 @@ FluScrollablePage{
newTab()
}
FluArea{
FluFrame{
Layout.fillWidth: true
Layout.topMargin: 20
height: 50
paddings: 10
Layout.preferredHeight: 50
padding: 10
RowLayout{
spacing: 14
FluDropDownButton{
id:btn_tab_width_behavior
Layout.preferredWidth: 140
text:"Equal"
items:[
FluMenuItem{
text:"Equal"
onClicked: {
btn_tab_width_behavior.text = text
tab_view.tabWidthBehavior = FluTabView.Equal
}
},
FluMenuItem{
text:"SizeToContent"
onClicked: {
btn_tab_width_behavior.text = text
tab_view.tabWidthBehavior = FluTabView.SizeToContent
}
},
FluMenuItem{
text:"Compact"
onClicked: {
btn_tab_width_behavior.text = text
tab_view.tabWidthBehavior = FluTabView.Compact
}
FluMenuItem{
text:"Equal"
onClicked: {
btn_tab_width_behavior.text = text
tab_view.tabWidthBehavior = FluTabViewType.Equal
}
]
}
FluMenuItem{
text:"SizeToContent"
onClicked: {
btn_tab_width_behavior.text = text
tab_view.tabWidthBehavior = FluTabViewType.SizeToContent
}
}
FluMenuItem{
text:"Compact"
onClicked: {
btn_tab_width_behavior.text = text
tab_view.tabWidthBehavior = FluTabViewType.Compact
}
}
}
FluDropDownButton{
id:btn_close_button_visibility
text:"Always"
Layout.preferredWidth: 120
items:[
FluMenuItem{
text:"Nerver"
onClicked: {
btn_close_button_visibility.text = text
tab_view.closeButtonVisibility = FluTabView.Nerver
}
},
FluMenuItem{
text:"Always"
onClicked: {
btn_close_button_visibility.text = text
tab_view.closeButtonVisibility = FluTabView.Always
}
},
FluMenuItem{
text:"OnHover"
onClicked: {
btn_close_button_visibility.text = text
tab_view.closeButtonVisibility = FluTabView.OnHover
}
FluMenuItem{
text:"Never"
onClicked: {
btn_close_button_visibility.text = text
tab_view.closeButtonVisibility = FluTabViewType.Never
}
]
}
FluMenuItem{
text:"Always"
onClicked: {
btn_close_button_visibility.text = text
tab_view.closeButtonVisibility = FluTabViewType.Always
}
}
FluMenuItem{
text:"OnHover"
onClicked: {
btn_close_button_visibility.text = text
tab_view.closeButtonVisibility = FluTabViewType.OnHover
}
}
}
}
}
FluArea{
FluFrame{
Layout.fillWidth: true
Layout.topMargin: 15
height: 400
paddings: 10
Layout.preferredHeight: 400
padding: 10
FluTabView{
id:tab_view
onNewPressed:{
@ -109,7 +104,7 @@ FluScrollablePage{
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -1
Layout.topMargin: -6
code:'FluTabView{
anchors.fill: parent
Component.onCompleted: {
@ -130,5 +125,4 @@ FluScrollablePage{
}
'
}
}

Some files were not shown because too many files have changed in this diff Show More