Compare commits

..

431 Commits
1.2.2 ... 1.4.0

Author SHA1 Message Date
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
a4d04499bc update 2023-06-12 18:03:25 +08:00
47b0c71f95 update 2023-06-12 17:36:36 +08:00
e651b731cf update 2023-06-12 17:04:35 +08:00
31bdea8d44 update 2023-06-12 16:46:02 +08:00
2fbc5696f7 update 2023-06-12 10:53:35 +08:00
f2ea9a19a1 update 2023-06-11 21:48:43 +08:00
aee97c2aab update 2023-06-11 21:44:54 +08:00
05b41f3383 update 2023-06-10 22:46:17 +08:00
b3ca045936 update 2023-06-10 11:11:28 +08:00
18205851f6 update 2023-06-10 11:01:36 +08:00
221361369e update 2023-06-09 18:15:09 +08:00
cf730bc769 update 2023-06-09 09:29:28 +08:00
49029164ff update 2023-06-08 23:19:38 +08:00
6da4a2e10e fix bub 2023-06-08 17:44:32 +08:00
021745c366 update version 2023-06-08 17:16:08 +08:00
2cfd5b3ab2 update 2023-06-08 17:05:52 +08:00
2c7d556042 update 2023-06-08 17:00:43 +08:00
609df92f8c update 2023-06-08 14:51:13 +08:00
ca57b16521 update 2023-06-08 14:32:04 +08:00
c25e2362c4 update 2023-06-08 14:23:00 +08:00
a37e4e3b9f update 2023-06-08 14:10:53 +08:00
e4f02f50ca update 2023-06-08 14:01:18 +08:00
6d7366f74c update 2023-06-08 13:57:16 +08:00
154670f744 update 2023-06-08 13:55:25 +08:00
11206c1d18 Merge branch '6.5.0' 2023-06-08 10:18:59 +08:00
3fa54b37c1 update 2023-06-08 10:17:49 +08:00
ca7292e168 Merge pull request #152 from Gaomengkai/main
Typo (in T_Menu.qml)
2023-06-07 10:22:05 +08:00
2becb17d52 Update T_Menu.qml
Typo
2023-06-07 09:49:39 +08:00
7c1b03b22f Merge pull request #150 from zhuzichu520/6.5.0
6.5.0
2023-06-06 22:21:56 +08:00
ebed19b130 update 2023-06-06 21:14:33 +08:00
d55874f01e update 2023-06-06 21:02:33 +08:00
b4f9f32195 update 2023-06-06 20:45:25 +08:00
cf9ffbe0ca update 2023-06-05 09:45:09 +08:00
b2328ba82c Merge branch 'main' of https://github.com/zhuzichu520/FluentUI 2023-06-03 08:27:56 +08:00
1073efe423 update 2023-06-03 08:27:32 +08:00
5af755dd95 update 2023-06-01 11:51:11 +08:00
5f2f127623 update 2023-05-31 15:39:59 +08:00
52174b7e24 Merge pull request #136 from felixonmars/patch-1
Correct typos in README.md
2023-05-28 08:25:33 +08:00
e69604f5a9 Correct typos in README.md 2023-05-27 23:34:17 +03:00
c23981b81d update 2023-05-26 14:08:22 +08:00
fc9e764c4c Merge branch 'main' of https://github.com/zhuzichu520/FluentUI 2023-05-26 13:49:36 +08:00
591e6bdeff update 2023-05-26 13:49:32 +08:00
4878c92595 Merge pull request #132 from mentalfl0w/dev
Expose more bulr options of FluPopup.
2023-05-26 13:44:21 +08:00
64f40451ec Expose more bulr options of FluPopup. 2023-05-26 13:15:44 +08:00
5c0befb6c2 Merge pull request #131 from parker-int64/test_branch
解决GCC类编译器链接的问题,修正framelesshelper中的flag
2023-05-26 11:10:27 +08:00
33b916a172 Merge branch 'test_branch' of https://github.com/parker-int64/FluentUI into test_branch 2023-05-26 10:26:00 +08:00
183e29dfaa The framelesshelper flag Global::Option::ForceHideWindowFrameBorder only available on windows 2023-05-26 10:25:28 +08:00
f1589e9d1a The debug shared library only works on windows 2023-05-26 10:24:30 +08:00
e3abd96b8e update 2023-05-26 07:36:39 +08:00
8b2b01beac Merge pull request #130 from mentalfl0w/dev
Add FluPopup for universally use.
2023-05-25 22:04:44 +08:00
3007f8f3df Add FluPopup for universally use. 2023-05-25 21:54:37 +08:00
0dbbba56da update 2023-05-25 17:00:48 +08:00
a123dfbccf update 2023-05-24 14:12:33 +08:00
4fdbb47bec Merge branch 'main' of https://github.com/zhuzichu520/FluentUI 2023-05-24 14:02:39 +08:00
24305a3137 update 2023-05-24 14:01:23 +08:00
22d5dfbbc3 Merge pull request #126 from mentalfl0w/dev
Fix acrylic effect for FluNavigationView CompactAndPanel mode.
2023-05-24 12:23:26 +08:00
3b42b30518 Fix acrylic effect for FluNavigationView CompactAndPanel mode. 2023-05-24 10:51:14 +08:00
1b41bd1bcd update 2023-05-23 18:04:21 +08:00
75e850750c update 2023-05-23 17:37:25 +08:00
22de749c74 update 2023-05-23 09:33:37 +08:00
1565e2a3eb update 2023-05-22 21:46:21 +08:00
b02695c012 Merge pull request #123 from mentalfl0w/dev
Add acrylic effect for FluContentDialog.
2023-05-22 21:01:00 +08:00
b7fdcca506 Add acrylic effect for FluContentDialog. 2023-05-22 20:39:00 +08:00
f802838847 fix utf8 without bom 2023-05-22 16:17:51 +08:00
038a2dd598 sync framlesshelper 2023-05-21 23:06:04 +08:00
27d1b3f57f update 2023-05-21 22:24:56 +08:00
1ca784c28f update 2023-05-21 21:34:30 +08:00
e7c185e723 Merge pull request #120 from mentalfl0w/dev
Fix the system titlebar buttons show behind surface.
2023-05-21 20:38:58 +08:00
87d9e45791 update 2023-05-21 20:37:03 +08:00
0ca1de2f1a Fix the system titlebar buttons show behind surface. 2023-05-21 20:33:32 +08:00
1897408528 update 2023-05-21 20:24:48 +08:00
7b922a4380 Merge pull request #119 from mentalfl0w/dev
Improve acrylic effect for example and FluNavigationView.
2023-05-21 20:07:14 +08:00
f998b58d88 Improve acrylic effect for example and FluNavigationview. 2023-05-21 19:35:01 +08:00
a44d2cfe64 sync frameplesshelper 2023-05-21 12:56:42 +08:00
91e7cc8a60 Update README.md 2023-05-20 23:35:07 +08:00
ae6ef539ff Update README.md 2023-05-20 23:09:49 +08:00
4187fb52dd Update README.md 2023-05-20 23:08:02 +08:00
db41a7a1ee update 2023-05-19 18:13:57 +08:00
3eeaae24db update 2023-05-19 13:50:06 +08:00
e67e7e4d3b update 2023-05-19 09:19:52 +08:00
d5ca61c0f6 update 2023-05-19 08:03:37 +08:00
15f90471dc update 2023-05-19 07:57:23 +08:00
2129301cd2 update 2023-05-18 23:33:31 +08:00
6366651453 update 2023-05-18 23:27:11 +08:00
8480267127 update 2023-05-18 23:24:53 +08:00
9adc63b3bc update 2023-05-18 22:58:35 +08:00
0003f8192e update 2023-05-18 20:57:57 +08:00
1491abc614 update 2023-05-18 20:32:53 +08:00
edd1ea90b9 update 2023-05-18 15:19:39 +08:00
4aba260eb5 update 2023-05-18 15:09:07 +08:00
8668db1587 update 2023-05-18 15:03:34 +08:00
56681cb5a3 update 2023-05-18 14:55:28 +08:00
ab68770d63 update 2023-05-18 09:40:07 +08:00
594c0222a2 update 2023-05-17 22:51:33 +08:00
2fb322536e Merge pull request #113 from mentalfl0w/dev
Fix the _systemDark don't get system color while app first boot.
2023-05-17 22:49:13 +08:00
71d3af6d49 update 2023-05-17 22:46:02 +08:00
323927c3ae Fix the _systemDark don't get system color while app first boot. 2023-05-17 22:44:38 +08:00
30c99c0907 update 2023-05-17 22:44:35 +08:00
d488ca481c update 2023-05-17 22:43:46 +08:00
3232ae9a7c Merge branch 'main' of https://github.com/zhuzichu520/FluentUI 2023-05-17 22:43:08 +08:00
0da8d18467 update 2023-05-17 22:43:00 +08:00
8b531e4637 update 2023-05-17 22:26:16 +08:00
bd422f96cf update 2023-05-17 22:19:46 +08:00
155960c15b update 2023-05-17 22:02:09 +08:00
1601b64883 update 2023-05-17 21:27:00 +08:00
5539c59233 update 2023-05-17 21:21:23 +08:00
4b2cbb542e Merge pull request #112 from mentalfl0w/dev
Fix the blur background in T_Home.qml
2023-05-17 20:46:20 +08:00
b36ceed119 update 2023-05-17 20:43:26 +08:00
1129a935eb Fix the blur background in T_Home.qml 2023-05-17 20:34:04 +08:00
1446fd8933 update 2023-05-17 20:20:29 +08:00
4e4760e37f Merge pull request #111 from mentalfl0w/dev
Improve FluAcrylic.
2023-05-17 19:57:14 +08:00
f365e08fb2 update 2023-05-17 19:52:33 +08:00
c0b76e6282 Improve FluAcrylic. 2023-05-17 19:29:09 +08:00
ac0b0aaaa9 update 2023-05-17 18:24:11 +08:00
a89d36fd14 update 2023-05-17 18:15:15 +08:00
7d7cd4144c update 2023-05-17 13:49:20 +08:00
68cf87dba9 update 2023-05-17 13:44:38 +08:00
55e668e95e Update README.md 2023-05-17 12:58:13 +08:00
e1889f7572 update 2023-05-17 12:56:35 +08:00
bcb862e316 update 2023-05-17 12:54:08 +08:00
b93f91a73f update 2023-05-17 12:49:41 +08:00
09dd381bbc update 2023-05-17 11:42:03 +08:00
09fa471a10 update 2023-05-16 21:09:37 +08:00
fb48ed543b update 2023-05-16 12:49:20 +08:00
b8179f0df4 Update README.md 2023-05-16 09:47:50 +08:00
1dd09ef676 Update README.md 2023-05-16 09:47:12 +08:00
bc6041b5a4 update 2023-05-15 21:32:15 +08:00
75193b216f update 2023-05-15 21:14:37 +08:00
c095008042 Merge pull request #105 from parker-int64/test_branch
Test branch - Fixed the path of README_zh_CN.md
2023-05-15 18:00:26 +08:00
128bb94742 changed display text and recapture the screenshots 2023-05-15 17:48:09 +08:00
684cf47101 Fixed the wrong path. 2023-05-15 16:38:52 +08:00
65f0dc2e55 Merge pull request #103 from parker-int64/test_branch
Test branch: Add Eng to README.md
2023-05-15 16:32:21 +08:00
0c4ff01732 add some additional pics 2023-05-15 16:07:07 +08:00
48333a2bcc move the original README to README_zh_CN, new README in Eng. 2023-05-15 16:06:43 +08:00
3e5d64f086 Merge pull request #100 from mentalfl0w/dev
Improve FluAcrylic.
2023-05-15 00:08:00 +08:00
63354f2d8d Improve FluAcrylic. 2023-05-14 22:58:31 +08:00
bf5a4ef4f5 update 2023-05-14 20:28:41 +08:00
ea04380bd5 Merge pull request #99 from mentalfl0w/dev
Add PageMode for FluNavigationView.
2023-05-14 19:26:03 +08:00
0c7fa3e5bb update 2023-05-14 19:06:10 +08:00
57fa166da3 Add PageMode for FluNavigationView. 2023-05-14 18:31:17 +08:00
87a1e4744c update 2023-05-14 16:54:13 +08:00
308e2407c3 Merge pull request #98 from mentalfl0w/dev
Use Qt6 compatible blur effect.
2023-05-14 14:17:20 +08:00
74afdeaf49 Use Qt6 compatible blur effect. 2023-05-14 13:05:06 +08:00
84e863f664 update 2023-05-13 17:56:26 +08:00
8475ec7f03 update 2023-05-13 17:30:07 +08:00
fdcf2de3ee update 2023-05-13 00:20:12 +08:00
a648b683d9 update 2023-05-12 22:22:55 +08:00
e1c6c04013 update 2023-05-12 19:26:49 +08:00
0c19164c54 update 2023-05-12 10:40:27 +08:00
86790c9562 Merge pull request #94 from runhey/main
FluProgressRing可以修改大小
2023-05-11 22:34:31 +08:00
b784f70479 update 2023-05-11 21:36:34 +08:00
4bd6712782 Merge branch 'zhuzichu520:main' into main 2023-05-11 21:19:34 +08:00
8668e39446 fix: FluProgressRing可以修改大小 2023-05-11 21:18:34 +08:00
a0dae17117 update 2023-05-11 20:10:42 +08:00
0a1c6d54bc update 2023-05-11 18:51:44 +08:00
f8146f24ea update 2023-05-11 18:24:58 +08:00
dd16b4703d update 2023-05-10 20:09:32 +08:00
7d5fcc6e47 update 2023-05-10 10:32:37 +08:00
9c843a7157 update 2023-05-10 00:27:53 +08:00
e4accb8064 update 2023-05-09 22:35:55 +08:00
747d18364b update 2023-05-09 20:30:52 +08:00
cb85f10758 update 2023-05-09 19:58:41 +08:00
88cae89f31 update 2023-05-09 19:52:35 +08:00
a14e502abd update 2023-05-09 18:31:59 +08:00
b20046c0a9 Merge branch 'main' of https://github.com/zhuzichu520/FluentUI 2023-05-09 17:18:10 +08:00
b5c0ec50a8 update 2023-05-09 17:17:57 +08:00
8281fa1e9d Merge pull request #87 from mentalfl0w/dev
Let the pagination can be manually adjusted in FluTableView.
2023-05-09 13:52:32 +08:00
26e9b5d298 Let the pagination can be manually adjusted in FluTableView. 2023-05-09 10:57:11 +08:00
eaad0dc565 update 2023-05-06 00:08:04 +08:00
9a494e938c update 2023-05-05 23:54:10 +08:00
ad35ac2588 update 2023-05-05 23:05:07 +08:00
c81910a41f update 2023-05-05 22:46:54 +08:00
cff6aaf6f4 update 2023-05-05 22:45:02 +08:00
a1c8672a5a update 2023-05-05 21:58:39 +08:00
df5e657ad1 update 2023-05-05 21:42:16 +08:00
fb4ed03530 update 2023-05-05 18:51:40 +08:00
7ceb4f27a3 Merge pull request #83 from mentalfl0w/dev
Make the library compile as Universal Library in macOS.
2023-05-04 08:23:58 +08:00
292e96cdfd Make the library compile as Universal Library in macOS. 2023-05-04 00:22:20 +08:00
c925ab79c6 Merge pull request #81 from mentalfl0w/dev
Allow the table to set the maximum height of each row based on the content.
2023-04-30 14:52:01 +08:00
f51d9f960b Allow the table to set the maximum height of each row based on the content. 2023-04-30 13:50:51 +08:00
86fa76edee update 2023-04-28 23:44:32 +08:00
4222597ef0 Merge pull request #76 from mentalfl0w/dev
Added ToolTip for FluTabView's tab.
2023-04-27 18:18:24 +08:00
a3adedf164 Added ToolTip for FluTabView's tab. 2023-04-27 18:06:01 +08:00
a70ddf7087 update 2023-04-27 17:29:39 +08:00
afeb6daea5 update 2023-04-27 15:43:45 +08:00
a258d429c2 Merge branch 'main' of https://github.com/zhuzichu520/FluentUI 2023-04-27 14:30:46 +08:00
7a25a48fdb update 2023-04-27 14:30:10 +08:00
0e434a36e7 Update README.md 2023-04-27 10:25:40 +08:00
36561fd75a Update README.md 2023-04-27 10:24:09 +08:00
430fac2f77 update 2023-04-27 10:12:53 +08:00
c15470f723 update 2023-04-27 09:38:57 +08:00
2aef114969 Merge pull request #74 from mentalfl0w/dev
Improve SingleInstance.
2023-04-26 00:18:46 +08:00
c0e470d78e Improve SingleInstance. 2023-04-25 23:58:25 +08:00
c8f2d7c926 Update README.md 2023-04-25 12:56:20 +08:00
b032e0306f Update README.md 2023-04-25 12:53:21 +08:00
36ac017e3d update 2023-04-24 21:14:08 +08:00
981445630b update 2023-04-24 21:05:39 +08:00
9494ec4ac6 update 2023-04-24 17:48:12 +08:00
d71441e7c5 update 2023-04-24 17:02:26 +08:00
9f0b8c5ec5 Merge branch 'main' of https://github.com/zhuzichu520/FluentUI 2023-04-23 18:08:50 +08:00
94c0356c25 update 2023-04-23 18:08:20 +08:00
9e73f33877 Merge pull request #70 from LiangLiang723/main
🐛 修复宏定义错误导致无法编译
2023-04-23 15:53:58 +08:00
adc8040604 🐛 修复宏定义错误导致无法编译 2023-04-23 10:26:06 +08:00
82d1edc43c update 2023-04-22 19:25:10 +08:00
da17b31be7 update 2023-04-22 18:45:10 +08:00
67518fb4e6 update 2023-04-22 18:29:43 +08:00
2bd03ad9d8 update 2023-04-22 18:26:10 +08:00
e16a8d6b09 update 2023-04-22 18:18:13 +08:00
9e0050be63 update 2023-04-22 18:08:11 +08:00
a4398d1a2f update 2023-04-22 18:01:52 +08:00
a27e5db032 update 2023-04-22 16:02:52 +08:00
f7c17a27b6 update 2023-04-22 00:29:47 +08:00
020a75ac93 update 2023-04-21 09:37:10 +08:00
1b0cdd6152 update 2023-04-20 23:37:51 +08:00
1a9cca4300 Merge pull request #67 from mentalfl0w/dev
Add addButtonVisibility into FluTabView.
2023-04-20 23:16:51 +08:00
d939546f31 Add addButtonVisibility into FluTabView. 2023-04-20 22:57:56 +08:00
9f9d9da601 update 2023-04-20 20:22:56 +08:00
6d24cbf37c update 2023-04-20 20:13:31 +08:00
d2929ad701 update 2023-04-20 19:15:38 +08:00
689843fbef Merge pull request #65 from mentalfl0w/dev
Imporve FluContentDialog and add relative example.
2023-04-20 18:49:53 +08:00
c6db001b74 Imporve FluContentDialog and add relative example. 2023-04-20 18:10:45 +08:00
3ec0841b44 add FluPasswordBox 2023-04-20 14:56:09 +08:00
b3d1568de4 Merge pull request #62 from mentalfl0w/dev
Fix crash in macOS.
2023-04-20 11:24:54 +08:00
2511c5dba8 Fix crash in macOS. 2023-04-20 11:08:13 +08:00
3049be128f update 2023-04-20 11:06:24 +08:00
3291b3a882 update 2023-04-20 09:34:57 +08:00
d5744a39bd update 2023-04-20 09:15:28 +08:00
882606b2f6 update 2023-04-20 09:01:58 +08:00
aba33c4d1f update 2023-04-20 00:15:13 +08:00
51aef3f3ec update 2023-04-19 23:53:00 +08:00
221afeea58 Merge branch 'main' of https://github.com/zhuzichu520/FluentUI 2023-04-19 23:05:02 +08:00
c19f5d4c48 update 2023-04-19 23:04:56 +08:00
d2eb72cc5b Merge pull request #60 from mentalfl0w/dev
Add sync with system toggle switch and remove the deprecated warning.
2023-04-19 22:58:33 +08:00
420a9b2bbb Add sync with system toggle switch and remove the deprecated warning. 2023-04-19 22:27:27 +08:00
59dacd8fae update 2023-04-19 18:24:08 +08:00
7489a4bcbe update 2023-04-19 18:04:14 +08:00
6dd859dd1d update 2023-04-19 17:25:46 +08:00
98363542d3 update 2023-04-19 16:58:54 +08:00
5b836a4d82 update 2023-04-19 14:13:46 +08:00
7dcb65f7b6 update 2023-04-19 11:22:44 +08:00
60c2ebee56 update 2023-04-19 10:14:35 +08:00
88fed82260 update 2023-04-19 09:41:08 +08:00
cb94db8a97 Merge pull request #53 from mentalfl0w/dev
Add automatic dark color mode switching function.
2023-04-16 02:30:08 +08:00
88008e16be update 2023-04-16 02:28:58 +08:00
f2db544be0 Add automatic dark color mode switching function. 2023-04-16 01:18:17 +08:00
6db8c4d4ac update 2023-04-15 21:20:00 +08:00
4ab78bbaba 修改registerForPageResult崩溃问题 2023-04-15 09:45:54 +08:00
11b2b04cb9 update 2023-04-14 17:43:19 +08:00
9f2e066a9f update 2023-04-14 17:36:33 +08:00
5b8312dcb9 update 2023-04-14 17:10:36 +08:00
b28f15c23b update 2023-04-14 17:07:54 +08:00
935f515a49 Merge branch 'main' of https://github.com/zhuzichu520/FluentUI 2023-04-14 15:18:32 +08:00
70585c007e 新增FluRatingControl组件 2023-04-14 15:18:08 +08:00
bdde046a4d Update README.md 2023-04-14 12:35:16 +08:00
ad420366f1 Update README.md 2023-04-14 12:34:51 +08:00
727a0220b4 update 2023-04-13 18:10:38 +08:00
ab0fcf5d9c FluWindowd新增launchMode枚举值,支持Standard、SingleTask、SingleInstance 2023-04-13 17:41:34 +08:00
f43bfec992 Merge pull request #43 from LiangLiang723/main
🔧 重构 FluWindow 后 CMakeLists 做对应修改
2023-04-13 16:36:12 +08:00
6bf38b5e5e 🔧 重构 FluWindow 后 CMakeLists 做对应修改 2023-04-13 15:01:04 +08:00
73ff2b45b9 update 2023-04-12 22:02:05 +08:00
7303e7d900 update 2023-04-12 13:42:45 +08:00
5ca1b715f3 update 2023-04-12 11:55:39 +08:00
cd984fddf5 update 2023-04-12 00:15:38 +08:00
2acb3c34bd update 2023-04-11 23:43:20 +08:00
1df3b4ba96 update 2023-04-11 23:39:20 +08:00
5ea3cb1054 Merge pull request #39 from zhuzichu520/dev1.2.4
update
2023-04-11 23:17:51 +08:00
5afd2ec518 update 2023-04-11 23:12:31 +08:00
59527fc954 Merge pull request #38 from zhuzichu520/dev1.2.4
update
2023-04-11 18:06:06 +08:00
c26fdfaee3 update 2023-04-11 18:05:07 +08:00
878dbd668b Merge pull request #36 from zhuzichu520/dev1.2.4
update
2023-04-11 16:31:35 +08:00
b10a0752fb update 2023-04-11 16:30:54 +08:00
51e73e7f8e fix bug 2023-04-11 16:30:07 +08:00
3a46fd11c6 update 2023-04-10 22:07:30 +08:00
70f048f629 update 2023-04-10 22:05:20 +08:00
1f2d0d9b9f update 2023-04-10 18:17:22 +08:00
310 changed files with 11750 additions and 8461 deletions

View File

@ -2,14 +2,19 @@ name: MacOS
on: on:
push: push:
paths: paths:
- '*.pro' - '*.txt'
- 'example/**'
- 'src/**' - 'src/**'
- 'scripts/**'
- '.github/workflows/macos.yml' - '.github/workflows/macos.yml'
pull_request: pull_request:
paths: paths:
- '*.pro' - '*.txt'
- 'example/**'
- 'src/**' - 'src/**'
- 'scripts/**'
- '.github/workflows/macos.yml' - '.github/workflows/macos.yml'
jobs: jobs:
build: build:
name: Build name: Build
@ -17,17 +22,16 @@ jobs:
strategy: strategy:
matrix: matrix:
os: [macos-12] os: [macos-12]
qt_ver: [6.4.3] qt_ver: [6.5.0]
qt_arch: [clang_64] qt_arch: [clang_64]
env: env:
targetName: example targetName: example
steps: steps:
- name: '⚙️ Cache Qt' - name: Check out repository
id: cache-qt uses: actions/checkout@v3
uses: actions/cache@v3
with: with:
path: ${{ runner.workspace }}/Qt submodules: recursive
key: ${{runner.os}}-qtcachedir-${{ matrix.qt_ver }}
- name: Install Qt - name: Install Qt
uses: jurplel/install-qt-action@v3 uses: jurplel/install-qt-action@v3
with: with:
@ -35,24 +39,30 @@ jobs:
cache: ${{steps.cache-qt.outputs.cache-hit}} cache: ${{steps.cache-qt.outputs.cache-hit}}
arch: ${{ matrix.qt_arch }} arch: ${{ matrix.qt_arch }}
modules: 'qt5compat qtmultimedia qtshadertools qtimageformats' modules: 'qt5compat qtmultimedia qtshadertools qtimageformats'
- uses: actions/checkout@v2
- name: Set up Ninja
uses: seanmiddleditch/gha-setup-ninja@v3
with: with:
fetch-depth: 1 version: 1.10.2
- name: build macos - name: build macos
run: | run: |
qmake cmake --version
make 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 --build . --target all --config Release --parallel
- name: package - name: package
run: | run: |
# 拷贝依赖 # 拷贝依赖
macdeployqt bin/release/${targetName}.app -qmldir=. -verbose=1 -dmg macdeployqt bin/release/${targetName}.app -qmldir=. -verbose=1 -dmg
# 上传artifacts
- uses: actions/upload-artifact@v2 - uses: actions/upload-artifact@v2
with: with:
name: ${{ env.targetName }}_${{ matrix.os }}_${{matrix.qt_ver}}.zip name: ${{ env.targetName }}_${{ matrix.os }}_${{matrix.qt_ver}}.zip
path: bin/release/${{ env.targetName }}.app path: bin/release/${{ env.targetName }}.app
# tag 上传Release
- name: uploadRelease - name: uploadRelease
if: startsWith(github.event.ref, 'refs/tags/') if: startsWith(github.event.ref, 'refs/tags/')
uses: svenstaro/upload-release-action@v2 uses: svenstaro/upload-release-action@v2

View File

@ -1,17 +1,21 @@
name: Ubuntu name: Ubuntu
# Qt官方没有linux平台的x86包
on: on:
workflow_dispatch: workflow_dispatch:
push: push:
paths: paths:
- '*.pro' - '*.txt'
- 'src/**' - 'src/**'
- 'example/**'
- 'scripts/**'
- '.github/workflows/ubuntu.yml' - '.github/workflows/ubuntu.yml'
pull_request: pull_request:
paths: paths:
- '*.pro' - '*.txt'
- 'src/**' - 'src/**'
- '.github/workflows/ubuntu.yml' - 'example/**'
- 'scripts/**'
- '.github/workflows/ubuntu.yml'
jobs: jobs:
build: build:
name: Build name: Build
@ -19,17 +23,16 @@ jobs:
strategy: strategy:
matrix: matrix:
os: [ubuntu-20.04] os: [ubuntu-20.04]
qt_ver: [6.4.3] qt_ver: [6.5.0]
qt_arch: [gcc_64] qt_arch: [gcc_64]
env: env:
targetName: example targetName: example
steps: steps:
- name: '⚙️ Cache Qt' - name: Check out repository
id: cache-qt uses: actions/checkout@v3
uses: actions/cache@v3
with: with:
path: ${{ runner.workspace }}/Qt submodules: recursive
key: ${{runner.os}}-qtcachedir-${{ matrix.qt_ver }}
- name: Install Qt - name: Install Qt
uses: jurplel/install-qt-action@v3 uses: jurplel/install-qt-action@v3
with: with:
@ -37,35 +40,45 @@ jobs:
cache: ${{steps.cache-qt.outputs.cache-hit}} cache: ${{steps.cache-qt.outputs.cache-hit}}
arch: ${{ matrix.qt_arch }} arch: ${{ matrix.qt_arch }}
modules: 'qt5compat qtmultimedia qtshadertools qtimageformats' modules: 'qt5compat qtmultimedia qtshadertools qtimageformats'
- name: ubuntu install GL library
run: sudo apt-get install -y 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: Set up Ninja
- uses: actions/checkout@v2 uses: seanmiddleditch/gha-setup-ninja@v3
with: with:
fetch-depth: 1 version: 1.10.2
- 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: build ubuntu - name: build ubuntu
run: | run: |
qmake ninja --version
make 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 --build . --target all --config Release --parallel
- name: install QT linux deploy - name: install QT linux deploy
uses: miurahr/install-linuxdeploy-action@v1 uses: miurahr/install-linuxdeploy-action@v1
with: with:
plugins: qt appimage plugins: qt appimage
- name: Check if svg file exists - name: Check if svg file exists
run: if [ ! -f "${targetName}.svg" ]; then echo "File not found, creating..."; touch ${targetName}.svg; fi run: if [ ! -f "${targetName}.svg" ]; then echo "File not found, creating..."; touch ${targetName}.svg; fi
# 打包
- name: package - name: package
run: | run: |
# make sure Qt plugin finds QML sources so it can deploy the imported files # make sure Qt plugin finds QML sources so it can deploy the imported files
export QML_SOURCES_PATHS=src 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 mv ${{ env.targetName }}-*.AppImage ${{ env.targetName }}.AppImage
# 上传artifacts
- uses: actions/upload-artifact@v2 - uses: actions/upload-artifact@v2
with: with:
name: ${{ env.targetName }}_${{ matrix.os }}_${{matrix.qt_ver}} name: ${{ env.targetName }}_${{ matrix.os }}_${{matrix.qt_ver}}
path: ${{ env.targetName }}.AppImage path: ${{ env.targetName }}.AppImage
# tag 上传Release
- name: uploadRelease - name: uploadRelease
if: startsWith(github.event.ref, 'refs/tags/') if: startsWith(github.event.ref, 'refs/tags/')
uses: svenstaro/upload-release-action@v2 uses: svenstaro/upload-release-action@v2

View File

@ -2,14 +2,19 @@ name: Windows MinGW
on: on:
push: push:
paths: paths:
- '*.pro' - '*.txt'
- 'src/**' - 'src/**'
- 'example/**'
- 'scripts/**'
- '.github/workflows/windows-mingw.yml' - '.github/workflows/windows-mingw.yml'
pull_request: pull_request:
paths: paths:
- '*.pro' - '*.txt'
- 'example/**'
- 'src/**' - 'src/**'
- '.github/workflows/windows-mingw.yml' - 'scripts/**'
- '.github/workflows/windows-mingw.yml'
jobs: jobs:
build: build:
name: Build name: Build
@ -18,13 +23,18 @@ jobs:
matrix: matrix:
include: include:
- qt_arch: win64_mingw - qt_arch: win64_mingw
qt_ver: 6.4.3 qt_ver: 6.5.0
qt_tools: "tools_mingw,9.0.0-1-202203221220,qt.tools.win64_mingw900" qt_tools: "tools_mingw,9.0.0-1-202203221220,qt.tools.win64_mingw900"
qt_tools_mingw_install: mingw900_64 qt_tools_mingw_install: mingw900_64
env: env:
targetName: example.exe targetName: example.exe
fileName: example fileName: example
steps: steps:
- name: Check out repository
uses: actions/checkout@v3
with:
submodules: recursive
- name: Install Qt - name: Install Qt
uses: jurplel/install-qt-action@v3 uses: jurplel/install-qt-action@v3
with: with:
@ -32,26 +42,29 @@ jobs:
arch: ${{ matrix.qt_arch }} arch: ${{ matrix.qt_arch }}
cache: ${{steps.cache-qt.outputs.cache-hit}} cache: ${{steps.cache-qt.outputs.cache-hit}}
modules: 'qt5compat qtmultimedia qtshadertools qtimageformats' modules: 'qt5compat qtmultimedia qtshadertools qtimageformats'
- uses: actions/checkout@v2
with:
fetch-depth: 1
- name: Qt6 environment configuration - name: Qt6 environment configuration
if: ${{ startsWith( matrix.qt_ver, 6 ) }} if: ${{ startsWith( matrix.qt_ver, 6 ) }}
shell: pwsh shell: pwsh
run: | run: |
Write-Output "${{ env.Qt6_DIR }}/bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append Write-Output "${{ env.Qt6_DIR }}/bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
Write-Output "${{ env.Qt6_DIR }}/../../Tools/${{ matrix.qt_tools_mingw_install }}/bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append Write-Output "${{ env.Qt6_DIR }}/../../Tools/${{ matrix.qt_tools_mingw_install }}/bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
- name: where is qmake & where is mingw32-make
- name: where is cmake & where is mingw32-make
shell: pwsh shell: pwsh
run: | run: |
Get-Command -Name 'qmake' | Format-List Get-Command -Name 'cmake' | Format-List
Get-Command -Name 'mingw32-make' | Format-List Get-Command -Name 'mingw32-make' | Format-List
- name: mingw-build - name: mingw-build
id: build id: build
shell: cmd shell: cmd
run: | run: |
qmake mkdir build
mingw32-make 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 ..
cmake --build . --target all --config Release --parallel
- name: package - name: package
id: package id: package
env: env:
@ -61,10 +74,12 @@ jobs:
& scripts\windows-mingw-publish.ps1 ${env:archiveName} ${env:targetName} & scripts\windows-mingw-publish.ps1 ${env:archiveName} ${env:targetName}
$name = ${env:archiveName} $name = ${env:archiveName}
echo "::set-output name=packageName::$name" echo "::set-output name=packageName::$name"
- uses: actions/upload-artifact@v2 - uses: actions/upload-artifact@v2
with: with:
name: ${{ steps.package.outputs.packageName }} name: ${{ steps.package.outputs.packageName }}
path: ${{ steps.package.outputs.packageName }} path: ${{ steps.package.outputs.packageName }}
- name: uploadRelease - name: uploadRelease
if: startsWith(github.event.ref, 'refs/tags/') if: startsWith(github.event.ref, 'refs/tags/')
uses: svenstaro/upload-release-action@v2 uses: svenstaro/upload-release-action@v2

View File

@ -1,68 +1,63 @@
name: Windows name: Windows
on: on:
# push代码时触发workflow
push: push:
paths: paths:
- '*.pro' - '*.txt'
- 'src/**' - 'src/**'
- 'example/**'
- 'scripts/**'
- '.github/workflows/windows.yml' - '.github/workflows/windows.yml'
pull_request: pull_request:
paths: paths:
- '*.pro' - '*.txt'
- 'example/**'
- 'src/**' - 'src/**'
- '.github/workflows/windows.yml' - 'scripts/**'
- '.github/workflows/windows.yml'
jobs: jobs:
build: build:
name: Build name: Build
# 运行平台, windows-latest目前是windows server 2019
# 参考文档 https://github.com/actions/virtual-environments/blob/main/images/win/Windows2019-Readme.md
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
strategy: strategy:
# 矩阵配置
matrix: matrix:
os: [windows-2019] os: [windows-2019]
include: include:
- qt_ver: 6.4.3 - qt_ver: 6.5.0
qt_arch: win64_msvc2019_64 qt_arch: win64_msvc2019_64
msvc_arch: x64 msvc_arch: x64
qt_arch_install: msvc2019_64 qt_arch_install: msvc2019_64
env: env:
targetName: example.exe targetName: example.exe
fileName: example fileName: example
# 步骤
steps: steps:
- name: '⚙️ Cache Qt' - name: Check out repository
id: cache-qt uses: actions/checkout@v3
uses: actions/cache@v3
with: with:
path: ${{ runner.workspace }}\Qt submodules: recursive
key: ${{runner.os}}-qtcachedir-${{ matrix.qt_ver }}
# 安装Qt
- name: Install Qt - name: Install Qt
# 使用外部action。这个action专门用来安装Qt
uses: jurplel/install-qt-action@v3 uses: jurplel/install-qt-action@v3
with: with:
version: ${{ matrix.qt_ver }} version: ${{ matrix.qt_ver }}
arch: ${{ matrix.qt_arch }} arch: ${{ matrix.qt_arch }}
cache: ${{steps.cache-qt.outputs.cache-hit}} cache: ${{steps.cache-qt.outputs.cache-hit}}
modules: 'qt5compat qtmultimedia qtshadertools qtimageformats' modules: 'qt5compat qtmultimedia qtshadertools qtimageformats qtspeech'
# 拉取代码
- uses: actions/checkout@v2
with:
fetch-depth: 1
# msvc编译
- name: msvc-build - name: msvc-build
id: build id: build
shell: cmd shell: cmd
run: | run: |
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" ${{ matrix.msvc_arch }} call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" ${{ matrix.msvc_arch }}
qmake mkdir build
nmake 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 --build . --target all --config Release --parallel
echo winSdkDir=%WindowsSdkDir% >> %GITHUB_ENV% echo winSdkDir=%WindowsSdkDir% >> %GITHUB_ENV%
echo winSdkVer=%WindowsSdkVersion% >> %GITHUB_ENV% echo winSdkVer=%WindowsSdkVersion% >> %GITHUB_ENV%
echo vcToolsInstallDir=%VCToolsInstallDir% >> %GITHUB_ENV% echo vcToolsInstallDir=%VCToolsInstallDir% >> %GITHUB_ENV%
echo vcToolsRedistDir=%VCToolsRedistDir% >> %GITHUB_ENV% echo vcToolsRedistDir=%VCToolsRedistDir% >> %GITHUB_ENV%
# 打包
- name: package - name: package
id: package id: package
env: env:
@ -73,14 +68,13 @@ jobs:
& scripts\windows-publish.ps1 ${env:archiveName} ${env:targetName} & scripts\windows-publish.ps1 ${env:archiveName} ${env:targetName}
# 记录packageName给后续step # 记录packageName给后续step
$name = ${env:archiveName} $name = ${env:archiveName}
echo "::set-output name=packageName::$name" echo "::set-output name=packageName::$name"
# tag 查询github-Release
# 上传artifacts
- uses: actions/upload-artifact@v2 - uses: actions/upload-artifact@v2
with: with:
name: ${{ steps.package.outputs.packageName }} name: ${{ steps.package.outputs.packageName }}
path: ${{ steps.package.outputs.packageName }} path: ${{ steps.package.outputs.packageName }}
# tag 上传Release
- name: uploadRelease - name: uploadRelease
if: startsWith(github.event.ref, 'refs/tags/') if: startsWith(github.event.ref, 'refs/tags/')
uses: svenstaro/upload-release-action@v2 uses: svenstaro/upload-release-action@v2

5
.gitignore vendored
View File

@ -33,4 +33,7 @@ CMakeLists.txt.user*
src/build-preset/plugins.qmltypes src/build-preset/plugins.qmltypes
bin bin
.DS_Store .DS_Store
build
cmake-build-*
.idea

3
.gitmodules vendored Normal file
View File

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

View File

@ -1,5 +1,35 @@
cmake_minimum_required(VERSION 3.16) cmake_minimum_required(VERSION 3.20)
project(FluentUI VERSION 0.1 LANGUAGES CXX) project(FluentUI VERSION 0.1 LANGUAGES CXX)
option(FLUENTUI_BUILD_EXAMPLES "Build FluentUI demo applications." ON)
option(FLUENTUI_BUILD_FRAMELESSHEPLER "Build FramelessHelper." ON)
option(FLUENTUI_BUILD_STATIC_LIB "Build static library." OFF)
#设置QML插件输出目录可以通过外部设置如果外部没有设置就默认到<QT_SDK_DIR_PATH>\qml\FluentUI目录下
set(FLUENTUI_QML_PLUGIN_DIRECTORY "" CACHE PATH "Path to FluentUI plugin")
if(NOT FLUENTUI_QML_PLUGIN_DIRECTORY)
set(FLUENTUI_QML_PLUGIN_DIRECTORY ${CMAKE_PREFIX_PATH}/qml/FluentUI)
endif()
add_subdirectory(src) add_subdirectory(src)
add_subdirectory(example)
if (FLUENTUI_BUILD_EXAMPLES)
add_subdirectory(example)
endif ()
if (FLUENTUI_BUILD_FRAMELESSHEPLER)
set(FRAMELESSHELPER_BUILD_STATIC ON)
set(FRAMELESSHELPER_NO_SUMMARY OFF)
set(FRAMELESSHELPER_NO_DEBUG_OUTPUT OFF)
set(FRAMELESSHELPER_BUILD_WIDGETS OFF)
add_definitions(-DFRAMELESSHELPER_CORE_NO_DEBUG_OUTPUT)
add_definitions(-DFRAMELESSHELPER_QUICK_NO_DEBUG_OUTPUT)
add_subdirectory(framelesshelper)
endif ()
message("------------------------ FluentUI ------------------------")
message("Build FluentUI demo applications.: ${FLUENTUI_BUILD_EXAMPLES}")
message("Build FramelessHelper.: ${FLUENTUI_BUILD_FRAMELESSHEPLER}")
message("Build static library.: ${FLUENTUI_BUILD_STATIC_LIB}")
message("Path to FluentUI plugin.: ${FLUENTUI_QML_PLUGIN_DIRECTORY}")

View File

@ -1,6 +0,0 @@
TEMPLATE = subdirs
SUBDIRS += \
src/FluentUI.pro \
example
example.depends = src/FluentUI.pro

160
README.md
View File

@ -1,99 +1,123 @@
# FluentUI <div align=center>
<img width=64 src="doc/preview/fluent_design.svg">
</div>
## 简介 <h1 align="center">
QML FluentUI
</h1>
<p align="center">
A fluent design component library for Qt QML。 <a href="https://zhuzichu520.github.io">official wasm app.</a>
</p>
这是一个漂亮的Fluent组件库使用QML插件开发的 ![win-badge] ![ubuntu-badge] ![macos-badge] ![release-badge] ![download-badge] ![download-latest]
<p align="center">
English | <a href="README_zh_CN.md">简体中文</a>
</p>
<div align=center>
<img src="doc/preview/demo_large.png">
</div>
## 编译状态
| [Windows][win-link]| [Ubuntu][ubuntu-link]|[MacOS][macos-link]|
|---------------|---------------|-----------------|
| ![win-badge] | ![ubuntu-badge] | ![macos-badge] |
[win-link]: https://github.com/zhuzichu520/FluentUI/actions?query=workflow%3AWindows "WindowsAction" [win-link]: https://github.com/zhuzichu520/FluentUI/actions?query=workflow%3AWindows "WindowsAction"
[win-badge]: https://github.com/zhuzichu520/FluentUI/workflows/Windows/badge.svg "Windows" [win-badge]: https://github.com/zhuzichu520/FluentUI/workflows/Windows/badge.svg "Windows"
[ubuntu-link]: https://github.com/zhuzichu520/FluentUI/actions?query=workflow%3AUbuntu "UbuntuAction" [ubuntu-link]: https://github.com/zhuzichu520/FluentUI/actions?query=workflow%3AUbuntu "UbuntuAction"
[ubuntu-badge]: https://github.com/zhuzichu520/FluentUI/workflows/Ubuntu/badge.svg "Ubuntu" [ubuntu-badge]: https://github.com/zhuzichu520/FluentUI/workflows/Ubuntu/badge.svg "Ubuntu"
[macos-link]: https://github.com/zhuzichu520/FluentUI/actions?query=workflow%3AMacOS "MacOSAction" [macos-link]: https://github.com/zhuzichu520/FluentUI/actions?query=workflow%3AMacOS "MacOSAction"
[macos-badge]: https://github.com/zhuzichu520/FluentUI/workflows/MacOS/badge.svg "MacOS" [macos-badge]: https://github.com/zhuzichu520/FluentUI/workflows/MacOS/badge.svg "MacOS"
## 发布
|[已发布][release-link]|[下载][download-link]|下载次数|
|:--:|:--:|:--:|
|![release-badge] |![download-badge]|![download-latest]|
[release-link]: https://github.com/zhuzichu520/FluentUI/releases "Release status" [release-link]: https://github.com/zhuzichu520/FluentUI/releases "Release status"
[release-badge]: https://img.shields.io/github/release/zhuzichu520/FluentUI.svg?style=flat-square "Release status" [release-badge]: https://img.shields.io/github/release/zhuzichu520/FluentUI.svg?style=flat-square "Release status"
[download-link]: https://github.com/zhuzichu520/FluentUI/releases/latest "Download status" [download-link]: https://github.com/zhuzichu520/FluentUI/releases/latest "Download status"
[download-badge]: https://img.shields.io/github/downloads/zhuzichu520/FluentUI/total.svg "Download status" [download-badge]: https://img.shields.io/github/downloads/zhuzichu520/FluentUI/total.svg "Download status"
[download-latest]: https://img.shields.io/github/downloads/zhuzichu520/FluentUI/latest/total.svg "latest status" [download-latest]: https://img.shields.io/github/downloads/zhuzichu520/FluentUI/latest/total.svg "latest status"
## 支持的组件
|目录|说明|备注| <p align=center>
|----|----|----| This is a beautiful FluentUI component library based on Qt QML. Currently the main branch supports Qt 6. If you want to use it in Qt 5, checkout the Qt 5 branch.
|FluApp|初始化入口|支持路由跳转| </p>
|FluWindow|无边框窗口|解决windows拖动闪烁问题|
|FluAppBar|窗口顶部标题栏|支持拖动窗口,最小化、最大化、关闭窗口|
|FluText|Text文本||
|FluButton|按钮||
|FluFilledButton|实心按钮||
|FluIconButton|图标按钮||
|FluTextButton|文本按钮||
|FluIcon|图标||
|FluRadioButton|单选按钮||
|FluTextBox|单行输入框||
|FluMultiLineTextBox|多行输入框||
|FluToggleSwitch|开关按钮||
|FluSlider|拖动条||
|FluInfoBar|提示Toast||
|FluContentDialog|对话框||
|FluProgressBar|条形进度条||
|FluProgressRing|圆形进度条||
|FluRectangle|矩形|支持部分圆角、clip|
|FluMenu|菜单框||
|FluTooltip|tooltip提示框||
|FluTreeView|树控件||
|FluTheme|主题设置|支持主题颜色切换,夜间模式|
|FluCarousel|轮播图组件|支持无限轮播|
|FluTimePicker|时间选择器||
|FluDatePicker|日期选择器||
|FluMenu|菜单Popup||
|FluNavigationView|响应式导航布局||
|FluScrollbar|滚动条||
|FluToggleButton|开关按钮||
|FluPagination|分页组件||
|FluTableView|表格组件||
|FluMediaPlayer|播放器||
|FluFlipView|FlipView||
# 部分效果预览 ## Requirements
## 首页 + Qt Core, Qt Quick, Qt QML, Qt ShaderTool, Qt 5 Compatibility Module. (**Essential**)
+ Qt LinguistTool (optional,for translations)
+ Qt Svg (optional, however essential for Qt 5)
![](doc/preview/home.png) Use [Qt Online Installers](https://download.qt.io/archive/online_installers/) to acquire the modules (**Recommended**) or compile them first before using the library.
## 各种Button按钮 ## ⚽ Get started
![](doc/preview/buttons.png) + Download the [pre-built release](https://github.com/zhuzichu520/FluentUI/releases). (Please pecify your platform and compilers.)
## 主题颜色切换、夜间模式 + run `example` program.
![](doc/preview/theme.png) or
## TableView表格组件 + Clone the repository.
![](doc/preview/tableview.png) ```SHELL
git clone --recursive https://github.com/zhuzichu520/FluentUI.git
```
## FluTreeView树组件 + Build
![](doc/preview/treeview.png) ```
git clone --recursive https://github.com/zhuzichu520/FluentUI.git
cd FluentUI
mkdir build
cd build
cmake -DCMAKE_PREFIX_PATH=<YOUR_QT_SDK_DIR_PATH> -DCMAKE_BUILD_TYPE=Release -GNinja <PATH_TO_THE_REPOSITORY>
cmake --build . --config Release --target all --parallel
```
## 轮播图组件 + Use your IDE (`Qt Creator` or `CLion`) to open the project. (only **CMake** supported).
![](doc/preview/carousel.png) <div align=center>
<img src="doc/preview/qt_creator_project.png">
</div>
### ⚡ Visitor count + Compile the project. Then try to execute the `example` demo program.
![](https://profile-counter.glitch.me/zhuzichu520-FluentUI/count.svg)
+ Great! Now you are ready to write your first QML FluentUI program! Check the documentations for more details.
## 📑 Documentations
(Work in progress...🚀)
## Supported components
|Catalog|Detail|Notes / Demos|
|:----:|:----:|:----:|
|FluApp|The initial entry of the program|Router supported(SPA)|
|FluWindow|Frameless Window|*This only works on windows|
|FluAppBar|Title bar on top of the window|Drag, minimize, maximize and close are supported.|
|FluText|Common text||
|FluButton|Common button|![btn](doc/preview/demo_standardbtn.png) |
|FluFilledButton|Filled button|![filledbtn](doc/preview/demo_filledbtn.png)|
|FluTextButton|Text button|![textbtn](doc/preview/demo_textbtn.png)|
|FluToggleButton|Toggle buttons|![togglebtn](doc/preview/demo_toggle_btn.png)|
|FluIcon|Common icon|![icons](doc/preview/demo_icon.png)|
|FluRadioButton|radio button|![radiobtn](doc/preview/demo_radiobtn.png)|
|FluTextBox|Single-line input box|![textbox](doc/preview/demo_textbox.png)|
|FluMultiLineTextBox|Multi-lines input area|![textarea](doc/preview/demo_multiline_textbox.png)|
|FluToggleSwitch|toggle switch|![toggleswitch](doc/preview/demo_toggle_switch.png)|
View more [`here`](doc/md/all_components.md)!
## Reference
+ [**Windows design**: Design guidelines and toolkits of Microsoft.](https://learn.microsoft.com/en-us/windows/apps/design/)
+ [**Microsoft/WinUI-Gallery**: Microsoft's demo](https://github.com/microsoft/WinUI-Gallery)
## License
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)

99
README_zh_CN.md Normal file
View File

@ -0,0 +1,99 @@
# FluentUI
## 简介
这是一个漂亮的Fluent组件库使用QML插件开发的。main分支是Qt6.4.3<a href="https://github.com/zhuzichu520/FluentUI/wiki/%E6%96%B0%E6%89%8B%E5%85%A5%E9%97%A8" target="_blank">如何使用?</a>。如果需要qt5的请切换至qt5分支<a href="https://github.com/zhuzichu520/FluentUI/wiki/%E6%96%B0%E6%89%8B%E5%85%A5%E9%97%A8%EF%BC%881.2.7%E4%BB%A5%E5%8F%8A%E4%B9%8B%E5%89%8D%E7%89%88%E6%9C%AC%EF%BC%89" target="_blank">如何使用?</a>
## 编译状态
| [Windows][win-link]| [Ubuntu][ubuntu-link]|[MacOS][macos-link]|
|---------------|---------------|-----------------|
| ![win-badge] | ![ubuntu-badge] | ![macos-badge] |
[win-link]: https://github.com/zhuzichu520/FluentUI/actions?query=workflow%3AWindows "WindowsAction"
[win-badge]: https://github.com/zhuzichu520/FluentUI/workflows/Windows/badge.svg "Windows"
[ubuntu-link]: https://github.com/zhuzichu520/FluentUI/actions?query=workflow%3AUbuntu "UbuntuAction"
[ubuntu-badge]: https://github.com/zhuzichu520/FluentUI/workflows/Ubuntu/badge.svg "Ubuntu"
[macos-link]: https://github.com/zhuzichu520/FluentUI/actions?query=workflow%3AMacOS "MacOSAction"
[macos-badge]: https://github.com/zhuzichu520/FluentUI/workflows/MacOS/badge.svg "MacOS"
## 发布
|[已发布][release-link]|[下载][download-link]|下载次数|
|:--:|:--:|:--:|
|![release-badge] |![download-badge]|![download-latest]|
[release-link]: https://github.com/zhuzichu520/FluentUI/releases "Release status"
[release-badge]: https://img.shields.io/github/release/zhuzichu520/FluentUI.svg?style=flat-square "Release status"
[download-link]: https://github.com/zhuzichu520/FluentUI/releases/latest "Download status"
[download-badge]: https://img.shields.io/github/downloads/zhuzichu520/FluentUI/total.svg "Download status"
[download-latest]: https://img.shields.io/github/downloads/zhuzichu520/FluentUI/latest/total.svg "latest status"
## 支持的组件
|目录|说明|备注|
|----|----|----|
|FluApp|初始化入口|支持路由跳转|
|FluWindow|无边框窗口|解决windows拖动闪烁问题|
|FluAppBar|窗口顶部标题栏|支持拖动窗口,最小化、最大化、关闭窗口|
|FluText|Text文本||
|FluButton|按钮||
|FluFilledButton|实心按钮||
|FluIconButton|图标按钮||
|FluTextButton|文本按钮||
|FluIcon|图标||
|FluRadioButton|单选按钮||
|FluTextBox|单行输入框||
|FluMultiLineTextBox|多行输入框||
|FluToggleSwitch|开关按钮||
|FluSlider|拖动条||
|FluInfoBar|提示Toast||
|FluContentDialog|对话框||
|FluProgressBar|条形进度条||
|FluProgressRing|圆形进度条||
|FluRectangle|矩形|支持部分圆角、clip|
|FluMenu|菜单框||
|FluTooltip|tooltip提示框||
|FluTreeView|树控件||
|FluTheme|主题设置|支持主题颜色切换,夜间模式|
|FluCarousel|轮播图组件|支持无限轮播|
|FluTimePicker|时间选择器||
|FluDatePicker|日期选择器||
|FluMenu|菜单Popup||
|FluNavigationView|响应式导航布局||
|FluScrollbar|滚动条||
|FluToggleButton|开关按钮||
|FluPagination|分页组件||
|FluTableView|表格组件||
|FluMediaPlayer|播放器||
|FluFlipView|FlipView||
# 部分效果预览
## 首页
![](doc/preview/home.png)
## 各种Button按钮
![](doc/preview/buttons.png)
## 主题颜色切换、夜间模式
![](doc/preview/theme.png)
## TableView表格组件
![](doc/preview/tableview.png)
## FluTreeView树组件
![](doc/preview/treeview.png)
## 轮播图组件
![](doc/preview/carousel.png)
### ⚡ Visitor count
![](https://profile-counter.glitch.me/zhuzichu520-FluentUI/count.svg)

37
doc/md/all_components.md Normal file
View File

@ -0,0 +1,37 @@
# 支持的组件
|Catalog|Detail|Notes / Demos|
|:----:|:----:|:----:|
|FluApp|The initial entry of the program|Router supported(SPA)|
|FluWindow|Frameless Window|*This only works on windows|
|FluAppBar|Title bar on top of the window|Drag, minimize, maximize and close are supported.|
|FluText|Common text||
|FluButton|Common button|![btn](../preview/demo_standardbtn.png) |
|FluFilledButton|Filled button|![filledbtn](../preview/demo_filledbtn.png)|
|FluTextButton|Text button|![textbtn](../preview/demo_textbtn.png)|
|FluToggleButton|Toggle buttons|![togglebtn](../preview/demo_toggle_btn.png)|
|FluIcon|fluent icons|![icons](../preview/demo_icon.png)|
|FluRadioButton|radio button|![radiobtn](../preview/demo_radiobtn.png)|
|FluTextBox|Single-line input box|![textbox](../preview/demo_textbox.png)|
|FluMultiLineTextBox|Multi-lines input area|![textarea](../preview/demo_multiline_textbox.png)|
|FluToggleSwitch|toggle switch|![toggleswitch](../preview/demo_toggle_switch.png)|
|FluSlider|Slider|![slider](../preview/demo_slider.png)|
|FluInfoBar|提示Toast|![infobar](../preview/demo_infobar.png)|
|FluContentDialog| dialog |![dialog](../preview/demo_content_dialog.png)|
|FluProgressBar| progress bar |![progress](../preview/demo_progress_bar_ring.png)|
|FluProgressRing|circle progress||
|FluRectangle|reactangle| ![rect](../preview/demo_rectangle.png)</br>*partially support `round` and `clip` feature|
|FluMenu|menu||
|FluTooltip|tooltip|![tooltip](../preview/demo_tooltip.png)|
|FluTreeView|tree view component|![treeview](../preview/demo_tree_view.png)|
|FluTheme|theme settings|theme color changes, dark mode are supported|
|FluCarousel|-||
|FluTimePicker| time picker ||
|FluDatePicker|date picker||
|FluMenu|the menu popup||
|FluNavigationView|responsive navigation view||
|FluScrollbar|scroll bar||
|FluPagination|||
|FluTableView|table component||
|FluMediaPlayer|multimedia components||
|FluFlipView| flip view||

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

BIN
doc/preview/demo_icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

BIN
doc/preview/demo_large.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

BIN
doc/preview/demo_slider.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 997 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -0,0 +1,7 @@
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Transformed by: SVG Repo Mixer Tools -->
<svg width="800px" height="800px" viewBox="0 0 73 73" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="#000000" stroke="#000000">
<g id="SVGRepo_bgCarrier" stroke-width="0"/>

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

View File

@ -1 +1,7 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1678260749060" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11227" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32"><path d="M0 0m170.663111 0l682.652445 0q170.663111 0 170.663111 170.663111l0 682.652445q0 170.663111-170.663111 170.663111l-682.652445 0q-170.663111 0-170.663111-170.663111l0-682.652445q0-170.663111 170.663111-170.663111Z" fill="#EBF2FF" p-id="11228"></path><path d="M512.351993 787.674257c182.822858 0 330.926439 98.568613 331.033103 231.312514 0 1.674632-0.031999 3.338597-0.106664 5.002563H181.43622c-0.074665-1.663965-0.106664-3.327931-0.106664-5.002563 0-132.743901 148.210246-231.312514 331.022437-231.312514z" fill="#7D99C8" p-id="11229"></path><path d="M592.264994 721.158309v79.817004h-0.810649c-5.546551 30.079373-38.847191 53.204225-79.102352 53.204225-40.244495 0-73.545134-23.114185-79.091686-53.193559h-0.81065V721.158309h159.815337z" fill="#FBDBCB" p-id="11230"></path><path d="M508.213412 765.626716c-44.105748-1.226641-85.363555-19.306264-118.568196-56.916147-22.826191-25.866128-35.199267-53.054895-37.097894-81.576968l-21.610217-1.610633a59.988084 59.988084 0 0 1-55.433511-56.585488l-0.319994-5.72788a34.932606 34.932606 0 0 1 43.124435-35.839254l0.949314-9.098477a608.008666 608.008666 0 0 1 40.031166-159.015354l10.389117-25.866127H655.026354l10.389117 25.866127a608.008666 608.008666 0 0 1 40.031166 159.015354l0.95998 9.098477a34.932606 34.932606 0 0 1 43.103102 35.839254l-0.309327 5.72788a59.988084 59.988084 0 0 1-55.433512 56.585488l-21.610217 1.610633c-1.909294 28.522072-14.271703 55.710839-37.097893 81.576968-34.239287 38.793858-77.054395 56.798817-122.717444 56.980146z" fill="#FFE7DB" p-id="11231"></path><path d="M546.911273 182.822858a10.666444 10.666444 0 0 1 1.429303 4.31991c0.533322 5.055895 0.714652 9.226474 0.533322 12.501073l-0.202662 2.346618 3.221266-0.543989c21.876878-3.733256 38.452532-9.877128 49.705631-18.452949l2.197288-1.73863a10.666444 10.666444 0 0 1 16.682319 3.98925c8.767817 20.650236 11.125102 40.681819 7.039853 60.116081l-0.373325 1.578633c4.746568 1.514635 9.589134 3.199933 14.506364 5.066562 27.882086 10.581113 57.769463 26.367451 76.883732 75.65709 20.212912 52.084248 18.826274 116.562905-4.149247 193.425304l-1.855961 6.101206H701.425387c-0.47999-51.732256-8.319827-90.526114-23.540843-116.392242-15.221016-25.866128-29.716714-46.185704-43.487094-60.969396-41.513802 10.399783-79.85967 15.914335-115.037603 16.564988l-6.997188 0.063998v0.191996c-37.065894 0-77.737047-5.546551-122.024124-16.628986-13.77038 10.954438-28.266078 31.220683-43.487094 60.7774-15.221016 29.556718-23.060853 68.414575-23.540843 116.584238h-11.114435c-24.746151-79.571676-26.740776-146.076957-6.005209-199.52651 8.746484-22.548864 19.732922-38.079207 31.764672-49.321639 18.079623-20.660903 40.180496-36.009916 66.302619-46.068374a424.716485 424.716485 0 0 1 32.319326-11.029103c25.25814-9.034478 44.991063-16.767651 59.209433-23.210183a366.221704 366.221704 0 0 0 29.151393-14.869024l7.359847-4.266578a10.666444 10.666444 0 0 1 14.623695 3.733256z" fill="#7D99C8" p-id="11232"></path></svg> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Transformed by: SVG Repo Mixer Tools -->
<svg width="800px" height="800px" viewBox="0 0 73 73" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="#000000" stroke="#000000">
<g id="SVGRepo_bgCarrier" stroke-width="0"/>

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -1,28 +0,0 @@
import QtQuick
import QtQuick.Window
import QtQuick.Controls
import QtQuick.Layouts
import QtMultimedia
import FluentUI
Window {
id:app
color: "#00000000"
//初始化一个MediaPlayer解决macos切换到T_MediaPalyer页面崩溃问题
MediaPlayer{}
Component.onCompleted: {
FluApp.init(app,properties)
FluTheme.frameless = ("windows" === Qt.platform.os)
FluTheme.dark = false
FluApp.routes = {
"/":"qrc:/page/MainPage.qml",
"/about":"qrc:/page/AboutPage.qml",
"/login":"qrc:/page/LoginPage.qml",
"/chat":"qrc:/page/ChatPage.qml",
"/media":"qrc:/page/MediaPage.qml",
}
FluApp.initialRoute = "/"
FluApp.run()
}
}

View File

@ -1,54 +1,83 @@
cmake_minimum_required(VERSION 3.16) cmake_minimum_required(VERSION 3.20)
project(example)
set(CMAKE_AUTOMOC ON) project(example VERSION 0.1 LANGUAGES CXX)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_CXX_STANDARD 17) #配置通用编译
set(CMAKE_CXX_STANDARD_REQUIRED ON)
if(APPLE)
set(CMAKE_OSX_ARCHITECTURES "arm64;x86_64" CACHE STRING "" FORCE)
endif()
#导入exmaple的QML位置不然import example有时候会爆红
set(QML_IMPORT_PATH ${CMAKE_BINARY_DIR}/example CACHE STRING "Qt Creator extra QML import paths" FORCE)
#判断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()
#获取文件路径分隔符(解决执行命令的时候有些平台会报错)
file(TO_CMAKE_PATH "/" PATH_SEPARATOR) file(TO_CMAKE_PATH "/" PATH_SEPARATOR)
if(CMAKE_SIZEOF_VOID_P EQUAL 8) #设置版本号
set(platform 64) add_definitions(-DVERSION=1,4,0,0)
find_package(Qt6 REQUIRED COMPONENTS Quick Svg Network)
if(QT_VERSION VERSION_GREATER_EQUAL "6.3")
qt_standard_project_setup()
else() else()
set(platform 32) set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
endif() endif()
if(CMAKE_BUILD_TYPE STREQUAL "Debug") #遍历所有Cpp文件
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../bin/debug) file(GLOB_RECURSE CPP_FILES *.cpp *.h)
else() foreach(filepath ${CPP_FILES})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../bin/release) string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/" "" filename ${filepath})
endif() list(APPEND sources_files ${filename})
endforeach(filepath)
find_package(Qt6 COMPONENTS Core Quick QuickControls2 Concurrent Network Multimedia REQUIRED) #遍历所有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)
set(SOURCES #遍历所有资源文件
ChatController.cpp file(GLOB_RECURSE RES_PATHS *.png *.jpg *.svg *.ico *.ttf *.webp qmldir)
main.cpp foreach(filepath ${RES_PATHS})
) string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/" "" filename ${filepath})
list(APPEND resource_files ${filename})
endforeach(filepath)
set(HEADERS #添加可执行文件
ChatController.h if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
) qt_add_executable(example
${sources_files}
set(RESOURCES example.rc
qml.qrc )
) else ()
qt_add_executable(example
set(RC_ICONS ${sources_files}
favicon.ico )
) endif ()
qt_add_resources(QT_RESOURCES ${RESOURCES})
add_executable(${PROJECT_NAME} ${SOURCES} ${HEADERS} ${QT_RESOURCES} ${RC_ICONS})
#复制动态库到可执行文件同级目录下
if(WIN32) if(WIN32)
if(CMAKE_C_COMPILER_ID STREQUAL "MSVC") if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
set(DLLPATH ${CMAKE_CURRENT_SOURCE_DIR}/../third/msvc/*.dll) set(DLLPATH ${CMAKE_SOURCE_DIR}/3rdparty/msvc/*.dll)
else() else()
set(DLLPATH ${CMAKE_CURRENT_SOURCE_DIR}/../third/mingw/*.dll) set(DLLPATH ${CMAKE_SOURCE_DIR}/3rdparty/mingw/*.dll)
endif() endif()
string(REPLACE "/" ${PATH_SEPARATOR} DLLPATH "${DLLPATH}") string(REPLACE "/" ${PATH_SEPARATOR} DLLPATH "${DLLPATH}")
file(GLOB DLL_FILES ${DLLPATH}) file(GLOB DLL_FILES ${DLLPATH})
@ -59,27 +88,53 @@ if(WIN32)
) )
endif() endif()
target_compile_definitions(${PROJECT_NAME} PRIVATE #添加qml模块
QT_DEPRECATED_WARNINGS qt_add_qml_module(example
QT_NO_WARNING_OUTPUT URI "example"
VERSION 1.0
QML_FILES ${qml_files}
RESOURCES ${resource_files}
) )
target_link_libraries(${PROJECT_NAME} PRIVATE #导入component头文件,不然通过QML_NAMED_ELEMENT生成的c++类会找不到头文件报错
Qt6::Core target_include_directories(example PRIVATE
Qt6::Quick ${CMAKE_CURRENT_SOURCE_DIR}/src/component
Qt6::QuickControls2
Qt6::Concurrent
Qt6::Network
Qt6::Multimedia
) )
if(WIN32) #设置属性
target_compile_definitions(${PROJECT_NAME} PRIVATE UNICODE WIN32 _WINDOWS) set_target_properties(example PROPERTIES
target_link_libraries(${PROJECT_NAME} PRIVATE dwmapi user32) MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com
endif() MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
MACOSX_BUNDLE TRUE
WIN32_EXECUTABLE TRUE
)
if(APPLE) #链接库
set_target_properties(${PROJECT_NAME} PROPERTIES if (FLUENTUI_BUILD_STATIC_LIB)
MACOSX_BUNDLE_INFO_PLIST Info.plist target_link_libraries(example PRIVATE
Qt6::Quick
Qt6::Svg
Qt6::Network
fluentui
fluentuiplugin
FramelessHelper::Core
FramelessHelper::Quick
)
else()
target_link_libraries(example PRIVATE
Qt6::Quick
Qt6::Svg
Qt6::Network
fluentuiplugin
FramelessHelper::Core
FramelessHelper::Quick
) )
endif() endif()
#安装
install(TARGETS example
BUNDLE DESTINATION .
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)

View File

@ -1,56 +0,0 @@
#include "ChatController.h"
ChatController::ChatController(QObject *parent)
: QObject{parent}
{
isLoading(false);
networkManager = new QNetworkAccessManager(this);
}
void ChatController::sendMessage(const QString& text){
isLoading(true);
QUrl apiUrl("https://api.openai.com/v1/chat/completions");
QNetworkRequest request(apiUrl);
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
request.setRawHeader("Authorization", QString::fromStdString("Bearer %1").arg(QString::fromUtf8(QByteArray::fromBase64(baseKey.toUtf8()))).toUtf8());
QJsonObject requestData;
requestData.insert("model", "gpt-3.5-turbo");
messages.append(createMessage("user",text));
requestData.insert("messages", messages);
QJsonDocument requestDoc(requestData);
QByteArray requestDataBytes = requestDoc.toJson();
QNetworkReply* reply = networkManager->post(request, requestDataBytes);
connect(reply, &QNetworkReply::finished,this, [=]() {
if (reply->error() == QNetworkReply::NoError) {
QString responseString = QString::fromUtf8(reply->readAll());
qDebug() << responseString;
QJsonDocument doc = QJsonDocument::fromJson(responseString.toUtf8());
QJsonObject jsonObj = doc.object();
QString text = jsonObj.value("choices").toArray().at(0).toObject().value("message").toObject().value("content").toString();
if(text.isEmpty()){
text = "响应错误content为空数据";
}else{
messages.append(createMessage("assistant",text));
}
responseData(text.trimmed());
} else {
responseData("网络错误:"+reply->errorString());
}
isLoading(false);
reply->deleteLater();
});
}
QJsonObject ChatController::createMessage(const QString& role,const QString& content){
QJsonObject message;
message.insert("role",role);
message.insert("content",content);
return message;
}
void ChatController::clipText(const QString& text){
qDebug()<<text;
QClipboard *clipboard = QGuiApplication::clipboard();
clipboard->setText(text);
}

View File

@ -1,35 +0,0 @@
#ifndef CHATCONTROLLER_H
#define CHATCONTROLLER_H
#include <QObject>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QJsonObject>
#include <QJsonDocument>
#include <QJsonArray>
#include <QGuiApplication>
#include <QClipboard>
#include <QByteArray>
#include <QFile>
#include "stdafx.h"
class ChatController : public QObject
{
Q_OBJECT
Q_PROPERTY_AUTO(bool,isLoading)
Q_PROPERTY_AUTO(QString,responseData);
public:
explicit ChatController(QObject *parent = nullptr);
Q_INVOKABLE void sendMessage(const QString& text);
Q_INVOKABLE void clipText(const QString& text);
private:
QJsonObject createMessage(const QString& role,const QString& content);
private:
QNetworkAccessManager* networkManager;
QJsonArray messages;
QString baseKey = "c2stbXgxWm5MQkZ5TzhNYzNmRWl6eDZUM0JsYmtGSnNBWjNiakJjSXB6WGN3QW9KSk11";
};
#endif // CHATCONTROLLER_H

View File

@ -1,29 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
<key>CFBundleExecutable</key>
<string>example</string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string>com.zhuzichu.example</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>LSMinimumSystemVersion</key>
<string>10.13</string>
<key>NOTE</key>
<string>This file was generated by Qt/QMake.</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
<key>NSSupportsAutomaticGraphicsSwitching</key>
<true/>
</dict>
</plist>

View File

@ -1,38 +0,0 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Window
import QtQuick.Controls
import FluentUI
import "./component"
FluScrollablePage{
title:"CheckBox"
leftPadding:10
rightPadding:10
bottomPadding:20
spacing: 0
FluArea{
Layout.fillWidth: true
height: 68
paddings: 10
Layout.topMargin: 20
Row{
spacing: 30
anchors.verticalCenter: parent.verticalCenter
FluCheckBox{
}
FluCheckBox{
text:"Text"
}
}
}
CodeExpander{
Layout.fillWidth: true
code:'FluCheckBox{
text:"Text"
}'
}
}

View File

@ -1,64 +0,0 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Window
import QtQuick.Controls
import FluentUI
import "./component"
FluScrollablePage{
title:"Dialog"
leftPadding:10
rightPadding:10
bottomPadding:20
spacing: 0
FluArea{
Layout.fillWidth: true
height: 68
paddings: 10
Layout.topMargin: 20
FluButton{
anchors.verticalCenter: parent.verticalCenter
Layout.topMargin: 20
text:"Show Dialog"
onClicked: {
dialog.open()
}
}
}
CodeExpander{
Layout.fillWidth: true
code:'FluContentDialog{
id:dialog
title:"友情提示"
message:"确定要退出程序么?"
negativeText:"取消"
onNegativeClicked:{
showSuccess("点击取消按钮")
}
positiveText:"确定"
onPositiveClicked:{
showSuccess("点击确定按钮")
}
}
dialog.open()
'
}
FluContentDialog{
id:dialog
title:"友情提示"
message:"确定要退出程序么?"
negativeText:"取消"
onNegativeClicked:{
showSuccess("点击取消按钮")
}
positiveText:"确定"
onPositiveClicked:{
showSuccess("点击确定按钮")
}
}
}

View File

@ -1,65 +0,0 @@
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import QtQuick.Window
import FluentUI
import "./component"
FluScrollablePage{
title:"MediaPlayer"
leftPadding:10
rightPadding:10
bottomPadding:20
spacing: 0
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
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,91 +0,0 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Window
import QtQuick.Controls
import FluentUI
import "./component"
FluScrollablePage{
title:"Menu"
leftPadding:10
rightPadding:10
bottomPadding:20
spacing: 0
FluArea{
Layout.fillWidth: true
height: 100
paddings: 10
Layout.topMargin: 20
Column{
id:layout_column
spacing: 15
anchors{
verticalCenter: parent.verticalCenter
left:parent.left
}
FluButton{
text:"左击菜单"
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
code:'FluMenu{
id:menu
FluMenuItem:{
text:"删除"
onClicked: {
showError("删除")
}
}
FluMenuItem:{
text:"修改"
onClicked: {
showInfo"修改")
}
}
}
menu.popup()
'
}
FluMenu{
id:menu
FluMenuItem{
text:"删除"
onClicked: {
showError("删除")
}
}
FluMenuItem{
text:"修改"
onClicked: {
showInfo("修改")
}
}
}
}

View File

@ -1,107 +0,0 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Window
import QtQuick.Controls
import FluentUI
import "./component"
FluScrollablePage{
property string password: ""
property var loginPageRegister: registerForPageResult("/login")
title:"MultiWindow"
leftPadding:10
rightPadding:10
bottomPadding:20
spacing: 0
Connections{
target: loginPageRegister
function onResult(data)
{
password = data.password
}
}
FluArea{
Layout.fillWidth: true
height: 100
paddings: 10
Layout.topMargin: 20
Column{
spacing: 15
anchors{
verticalCenter: parent.verticalCenter
left: parent.left
}
FluText{
text:"页面跳转,不携带任何参数"
}
FluButton{
text:"点击跳转"
onClicked: {
FluApp.navigate("/about")
}
}
}
}
CodeExpander{
Layout.fillWidth: true
code:'FluButton{
text:"点击跳转"
onClicked: {
FluApp.navigate("/about")
}
}
'
}
FluArea{
Layout.fillWidth: true
height: 130
paddings: 10
Layout.topMargin: 20
Column{
spacing: 15
anchors{
verticalCenter: parent.verticalCenter
left: parent.left
}
FluText{
text:"页面跳转并携带参数用户名zhuzichu"
}
FluButton{
text:"点击跳转到登录"
onClicked: {
loginPageRegister.launch({username:"zhuzichu"})
}
}
FluText{
text:"登录窗口返回过来的密码->"+password
}
}
}
CodeExpander{
Layout.fillWidth: true
code:'property var loginPageRegister: registerForPageResult("/login")
Connections{
target: loginPageRegister
function onResult(data)
{
password = data.password
}
}
FluButton{
text:"点击跳转"
onClicked: {
loginPageRegister.launch({username:"zhuzichu"})
}
}
'
}
}

View File

@ -1,69 +0,0 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Window
import QtQuick.Controls
import FluentUI
import "./component"
FluScrollablePage{
title:"Progress"
leftPadding:10
rightPadding:10
bottomPadding:20
spacing: 0
FluArea{
Layout.fillWidth: true
Layout.topMargin: 20
height: 260
paddings: 10
ColumnLayout{
spacing: 20
anchors{
verticalCenter: parent.verticalCenter
left: parent.left
}
FluProgressBar{
}
FluProgressRing{
}
FluProgressBar{
id:progress_bar
indeterminate: false
}
FluProgressRing{
id:progress_ring
indeterminate: false
}
FluSlider{
value:50
onValueChanged:{
progress_bar.progress = value/100
progress_ring.progress = value/100
}
}
}
}
CodeExpander{
Layout.fillWidth: true
code:'FluProgressBar{
}
FluProgressRing{
}
FluProgressBar{
indeterminate: false
}
FluProgressRing{
indeterminate: false
}'
}
}

View File

@ -1,91 +0,0 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Controls
import QtQuick.Window
import FluentUI
import "./component"
FluScrollablePage{
title:"StatusView"
leftPadding:10
rightPadding:10
bottomPadding:20
spacing: 0
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
code:'FluStatusView{
anchors.fill: parent
statusMode: FluStatusView.Loading
Rectangle{
anchors.fill: parent
color:FluTheme.primaryColor.dark
}
}'
}
}

View File

@ -1,137 +0,0 @@
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import QtQuick.Window
import FluentUI
import "./component"
FluScrollablePage{
title:"TabView"
leftPadding:10
rightPadding:10
bottomPadding:20
spacing: 0
property var colors : [FluColors.Yellow,FluColors.Orange,FluColors.Red,FluColors.Magenta,FluColors.Purple,FluColors.Blue,FluColors.Teal,FluColors.Green]
Component{
id:com_page
Rectangle{
anchors.fill: parent
color: argument
}
}
function newTab(){
tab_view.appendTab("qrc:/res/image/favicon.ico","Document "+tab_view.count(),com_page,colors[Math.floor(Math.random() * 8)].dark)
}
Component.onCompleted: {
newTab()
newTab()
newTab()
}
FluArea{
Layout.fillWidth: true
Layout.topMargin: 20
height: 50
paddings: 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
}
}
]
}
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
}
}
]
}
}
}
FluArea{
Layout.fillWidth: true
Layout.topMargin: 15
height: 400
paddings: 10
FluTabView{
id:tab_view
onNewPressed:{
newTab()
}
}
}
CodeExpander{
Layout.fillWidth: true
code:'FluTabView{
anchors.fill: parent
Component.onCompleted: {
newTab()
newTab()
newTab()
}
Component{
id:com_page
Rectangle{
anchors.fill: parent
color: argument
}
}
function newTab(){
tab_view.appendTab("qrc:/res/image/favicon.ico","Document 1",com_page,argument)
}
}
'
}
}

View File

@ -1,160 +0,0 @@
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import QtQuick.Window
import FluentUI
import "./component"
FluScrollablePage{
title:"TableView"
leftPadding:10
rightPadding:10
bottomPadding:20
spacing: 0
Component.onCompleted: {
const columns = [
{
title: '姓名',
dataIndex: 'name',
width:100
},
{
title: '年龄',
dataIndex: 'age',
width:100
},
{
title: '住址',
dataIndex: 'address',
width:200
},
{
title: '别名',
dataIndex: 'nickname',
width:100
},
{
title: '操作',
dataIndex: 'action',
width:100
},
];
table_view.columns = columns
loadData(1,10)
}
FluTableView{
id:table_view
Layout.fillWidth: true
Layout.topMargin: 20
pageCurrent:1
pageCount:10
itemCount: 1000
onRequestPage:
(page,count)=> {
loadData(page,count)
}
}
Component{
id:com_action
Item{
Row{
anchors.centerIn: parent
spacing: 10
FluFilledButton{
text:"编辑"
topPadding:3
bottomPadding:3
leftPadding:3
rightPadding:3
onClicked:{
console.debug(dataModel.index)
showSuccess(JSON.stringify(dataObject))
}
}
FluFilledButton{
text:"删除"
topPadding:3
bottomPadding:3
leftPadding:3
rightPadding:3
onClicked:{
showError(JSON.stringify(dataObject))
}
}
}
}
}
function loadData(page,count){
const dataSource = []
for(var i=0;i<count;i++){
dataSource.push({
name: "孙悟空%1".arg(((page-1)*count+i)),
age: 500,
address: "钟灵毓秀的花果山,如神仙仙境的水帘洞",
nickname: "齐天大圣",
action:com_action
})
}
table_view.dataSource = dataSource
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: 10
code:'FluTableView{
id:table_view
Layout.fillWidth: true
Layout.topMargin: 20
width:parent.width
pageCurrent:1
pageCount:10
itemCount: 1000
onRequestPage:
(page,count)=> {
loadData(page,count)
}
Component.onCompleted: {
const columns = [
{
title: "姓名",
dataIndex: "name",
width:100
},
{
title: "年龄",
dataIndex: "age",
width:100
},
{
title: "住址",
dataIndex: "address",
width:200
},
{
title: "别名",
dataIndex: "nickname",
width:100
}
];
table_view.columns = columns
const dataSource = [
{
name: "孙悟空”,
age: 500,
address:"钟灵毓秀的花果山,如神仙仙境的水帘洞",
nickname:"齐天大圣"
}
];
table_view.dataSource = columns
}
}'
}
}

View File

@ -1,39 +0,0 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Window
import QtQuick.Controls
import FluentUI
import "./component"
FluScrollablePage{
title:"ToggleSwitch"
leftPadding:10
rightPadding:10
bottomPadding:20
spacing: 0
FluArea{
Layout.fillWidth: true
height: 68
paddings: 10
Layout.topMargin: 20
Row{
spacing: 30
anchors.verticalCenter: parent.verticalCenter
FluToggleSwitch{
}
FluToggleSwitch{
text:"Text"
}
}
}
CodeExpander{
Layout.fillWidth: true
code:'FluToggleSwitch{
text:"Text"
}'
}
}

View File

@ -1,130 +0,0 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Window
import QtQuick.Controls
import FluentUI
FluExpander{
property string code: ""
headerText: "Source"
contentHeight:content.height
FluMultilineTextBox{
id:content
width:parent.width
readOnly:true
text:highlightQmlCode(code)
focus:false
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
}
}
FluIconButton{
iconSource:FluentIcons.Copy
anchors{
right: parent.right
top: parent.top
rightMargin: 5
topMargin: 5
}
onClicked:{
FluApp.clipText(content.text)
showSuccess("复制成功")
}
}
function htmlEncode(e){
var i,s;
for(i in s={
"&":/&/g,//""//":/"/g,"'":/'/g,
"<":/</g,">":/>/g,"<br/>":/\n/g,
" ":/ /g," ":/\t/g
})e=e.replace(s[i],i);
return e;
}
function highlightQmlCode(code) {
// 定义 QML 关键字列表
var qmlKeywords = [
"FluTextButton",
"FluAppBar",
"FluAutoSuggestBox",
"FluBadge",
"FluButton",
"FluCalendarPicker",
"FluCalendarView",
"FluCarousel",
"FluCheckBox",
"FluColorPicker",
"FluColorView",
"FluComboBox",
"FluContentDialog",
"FluContentPage",
"FluControl",
"FluDatePicker",
"FluDivider",
"FluDropDownButton",
"FluExpander",
"FluFilledButton",
"FluFlipView",
"FluFocusRectangle",
"FluIcon",
"FluIconButton",
"FluInfoBar",
"FluItem",
"FluMediaPlayer",
"FluMenu",
"FluMenuItem",
"FluMultilineTextBox",
"FluNavigationView",
"FluObject",
"FluPaneItem",
"FluPaneItemExpander",
"FluPaneItemHeader",
"FluPaneItemSeparator",
"FluPivot",
"FluPivotItem",
"FluProgressBar",
"FluProgressRing",
"FluRadioButton",
"FluRectangle",
"FluScrollablePage",
"FluScrollBar",
"FluShadow",
"FluSlider",
"FluTabView",
"FluText",
"FluTextArea",
"FluTextBox",
"FluTextBoxBackground",
"FluTextBoxMenu",
"FluTextButton",
"FluTextFiled",
"FluTimePicker",
"FluToggleSwitch",
"FluTooltip",
"FluTreeView",
"FluWindow",
"FluWindowResize",
"FluToggleButton",
"FluTableView",
"FluColors",
"FluTheme",
"FluStatusView"
];
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,43 +0,0 @@
QT += quick quickcontrols2 concurrent network multimedia
CONFIG += c++17
DEFINES += QT_DEPRECATED_WARNINGS QT_NO_WARNING_OUTPUT
HEADERS += \
ChatController.h
SOURCES += \
ChatController.cpp \
main.cpp
RESOURCES += qml.qrc
RC_ICONS = favicon.ico
QML_IMPORT_PATH =
QML_DESIGNER_IMPORT_PATH =
CONFIG(debug,debug|release) {
DESTDIR = $$absolute_path($${_PRO_FILE_PWD_}/../bin/debug)
} else {
DESTDIR = $$absolute_path($${_PRO_FILE_PWD_}/../bin/release)
}
win32 {
contains(QMAKE_CC, cl) {
COPYDLL = $$absolute_path($${_PRO_FILE_PWD_}/../third/msvc/*.dll) $$DESTDIR
QMAKE_PRE_LINK += $$QMAKE_COPY $$replace(COPYDLL, /, $$QMAKE_DIR_SEP)
} else {
COPYDLL = $$absolute_path($${_PRO_FILE_PWD_}/../third/mingw/*.dll) $$DESTDIR
QMAKE_PRE_LINK += $$QMAKE_COPY $$replace(COPYDLL, /, $$QMAKE_DIR_SEP)
}
}
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
mac: {
QMAKE_INFO_PLIST = Info.plist
}

42
example/example.rc Normal file
View File

@ -0,0 +1,42 @@
#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

View File

@ -1,21 +0,0 @@
pragma Singleton
import QtQuick
import FluentUI
FluObject{
id:footer_items
FluPaneItemSeparator{}
FluPaneItem{
title:"意见反馈"
onTap:{
Qt.openUrlExternally("https://github.com/zhuzichu520/FluentUI/issues/new")
}
}
FluPaneItem{
title:"关于"
onTap:{
FluApp.navigate("/about")
}
}
}

View File

@ -1,321 +0,0 @@
pragma Singleton
import QtQuick
import FluentUI
FluObject{
property var navigationView
FluPaneItem{
title:"Home"
icon:FluentIcons.Home
onTap:{
navigationView.push("qrc:/T_Home.qml")
}
}
FluPaneItemExpander{
title:"Basic input"
icon:FluentIcons.CheckboxComposite
FluPaneItem{
title:"Buttons"
image:"qrc:/res/image/control/Button.png"
recentlyUpdated:true
desc:"A control that responds to user input and raisesa Click event."
onTap:{
navigationView.push("qrc:/T_Buttons.qml")
}
}
FluPaneItem{
title:"Slider"
image:"qrc:/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:/T_Slider.qml")
}
}
FluPaneItem{
title:"CheckBox"
image:"qrc:/res/image/control/Checkbox.png"
recentlyUpdated:true
desc:"A control that a user can select or clear."
onTap:{
navigationView.push("qrc:/T_CheckBox.qml")
}
}
FluPaneItem{
title:"ToggleSwitch"
onTap:{
navigationView.push("qrc:/T_ToggleSwitch.qml")
}
}
}
FluPaneItemExpander{
title:"Form"
icon:FluentIcons.GridView
FluPaneItem{
title:"TextBox"
onTap:{
navigationView.push("qrc:/T_TextBox.qml")
}
}
FluPaneItem{
title:"TimePicker"
onTap:{
navigationView.push("qrc:/T_TimePicker.qml")
}
}
FluPaneItem{
title:"DatePicker"
onTap:{
navigationView.push("qrc:/T_DatePicker.qml")
}
}
FluPaneItem{
title:"CalendarPicker"
onTap:{
navigationView.push("qrc:/T_CalendarPicker.qml")
}
}
FluPaneItem{
title:"ColorPicker"
onTap:{
navigationView.push("qrc:/T_ColorPicker.qml")
}
}
}
FluPaneItemExpander{
title:"Surface"
icon:FluentIcons.SurfaceHub
FluPaneItem{
title:"InfoBar"
image:"qrc:/res/image/control/InfoBar.png"
recentlyUpdated:true
desc:"An inline message to display app-wide statuschange information."
onTap:{
navigationView.push("qrc:/T_InfoBar.qml")
}
}
FluPaneItem{
title:"Progress"
onTap:{
navigationView.push("qrc:/T_Progress.qml")
}
}
FluPaneItem{
title:"Badge"
onTap:{
navigationView.push("qrc:/T_Badge.qml")
}
}
FluPaneItem{
title:"Rectangle"
onTap:{
navigationView.push("qrc:/T_Rectangle.qml")
}
}
FluPaneItem{
title:"StatusView"
onTap:{
navigationView.push("qrc:/T_StatusView.qml")
}
}
FluPaneItem{
title:"Carousel"
onTap:{
navigationView.push("qrc:/T_Carousel.qml")
}
}
FluPaneItem{
title:"Expander"
onTap:{
navigationView.push("qrc:/T_Expander.qml")
}
}
}
FluPaneItemExpander{
title:"Popus"
icon:FluentIcons.ButtonMenu
FluPaneItem{
title:"Dialog"
onTap:{
navigationView.push("qrc:/T_Dialog.qml")
}
}
FluPaneItem{
title:"Tooltip"
onTap:{
navigationView.push("qrc:/T_Tooltip.qml")
}
}
FluPaneItem{
title:"Menu"
onTap:{
navigationView.push("qrc:/T_Menu.qml")
}
}
}
FluPaneItemExpander{
title:"Navigation"
icon:FluentIcons.AllApps
FluPaneItem{
title:"Pivot"
image:"qrc:/res/image/control/Pivot.png"
recentlyAdded:true
order:3
desc:"Presents information from different sources in atabbed view."
onTap:{
navigationView.push("qrc:/T_Pivot.qml")
}
}
FluPaneItem{
title:"TabView"
image:"qrc:/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:/T_TabView.qml")
}
}
FluPaneItem{
title:"TreeView"
onTap:{
navigationView.push("qrc:/T_TreeView.qml")
}
}
FluPaneItem{
title:"TableView"
image:"qrc:/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:/T_TableView.qml")
}
}
FluPaneItem{
title:"MultiWindow"
onTap:{
navigationView.push("qrc:/T_MultiWindow.qml")
}
}
FluPaneItem{
title:"FlipView"
image:"qrc:/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:/T_FlipView.qml")
}
}
}
FluPaneItemExpander{
title:"Theming"
icon:FluentIcons.Brightness
FluPaneItem{
title:"Theme"
onTap:{
navigationView.push("qrc:/T_Theme.qml")
}
}
FluPaneItem{
title:"Typography"
onTap:{
navigationView.push("qrc:/T_Typography.qml")
}
}
FluPaneItem{
title:"Awesome"
onTap:{
navigationView.push("qrc:/T_Awesome.qml")
}
}
}
FluPaneItemExpander{
title:"Media"
icon:FluentIcons.Media
FluPaneItem{
title:"MediaPlayer"
image:"qrc:/res/image/control/MediaPlayerElement.png"
recentlyAdded:true
order:0
desc:"A control to display video and image content."
onTap:{
navigationView.push("qrc:/T_MediaPlayer.qml")
}
}
}
function getRecentlyAddedData(){
var arr = []
for(var i=0;i<children.length;i++){
var item = children[i]
if(item instanceof FluPaneItem && item.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 })
return arr
}
function getRecentlyUpdatedData(){
var arr = []
var items = navigationView.getItems();
for(var i=0;i<items.length;i++){
var item = items[i]
if(item instanceof FluPaneItem && item.recentlyUpdated){
arr.push(item)
}
}
return arr
}
function getSearchData(){
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})
}
}
return arr
}
function startPageByItem(data){
var items = navigationView.getItems();
for(var i=0;i<items.length;i++){
var item = items[i]
if(item.key === data.key){
if(navigationView.getCurrentIndex() === i){
return
}
item.tap()
navigationView.setCurrentIndex(i)
if(item.parent){
item.parent.isExpand = true
}
return
}
}
}
}

View File

@ -1,43 +0,0 @@
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>
#include <QDir>
#include <QQuickWindow>
#include <QQuickStyle>
#include <QProcess>
#include "ChatController.h"
QMap<QString, QVariant> properties(){
QMap<QString, QVariant> map;
// map["installHelper"] = QVariant::fromValue(QVariant::fromValue(InstallHelper::getInstance()));
return map;
}
int main(int argc, char *argv[])
{
QCoreApplication::setOrganizationName("ZhuZiChu");
QCoreApplication::setOrganizationDomain("https://zhuzichu520.github.io");
QCoreApplication::setApplicationName("FluentUI");
QQuickStyle::setStyle("Basic");
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
qmlRegisterType<ChatController>("Controller",1,0,"ChatController");
QMapIterator<QString, QVariant> iterator(properties());
while (iterator.hasNext()) {
iterator.next();
QString key = iterator.key();
QVariant value = iterator.value();
engine.rootContext()->setContextProperty(key,value);
}
engine.rootContext()->setContextProperty("properties",properties());
const QUrl url(QStringLiteral("qrc:/App.qml"));
QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
&app, [url](QObject *obj, const QUrl &objUrl) {
if (!obj && url == objUrl)
QCoreApplication::exit(-1);
}, Qt::QueuedConnection);
engine.load(url);
return app.exec();
}

View File

@ -1,95 +0,0 @@
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import FluentUI
FluWindow {
width: 500
height: 600
minimumWidth: 500
minimumHeight: 600
maximumWidth: 500
maximumHeight: 600
title:"关于"
FluAppBar{
id:appbar
title:"关于"
width:parent.width
}
ColumnLayout{
anchors{
top: appbar.bottom
left: parent.left
right: parent.right
}
RowLayout{
Layout.topMargin: 20
Layout.leftMargin: 15
spacing: 14
FluText{
text:"FluentUI"
fontStyle: FluText.Title
}
FluText{
text:"v1.2.2"
fontStyle: FluText.Body
Layout.alignment: Qt.AlignBottom
}
}
RowLayout{
spacing: 14
Layout.topMargin: 20
Layout.leftMargin: 15
FluText{
text:"作者:"
}
FluText{
text:"朱子楚"
Layout.alignment: Qt.AlignBottom
}
}
RowLayout{
spacing: 14
Layout.topMargin: 20
Layout.leftMargin: 15
FluText{
text:"GitHub"
}
FluTextButton{
id:text_hublink
text:"https://github.com/zhuzichu520/FluentUI"
Layout.alignment: Qt.AlignBottom
onClicked: {
Qt.openUrlExternally(text_hublink.text)
}
}
}
RowLayout{
spacing: 14
Layout.topMargin: 20
Layout.leftMargin: 15
FluText{
id:text_info
text:"如果该项目对你有作用就请点击上方链接给一个免费的star吧"
ColorAnimation {
id: animation
target: text_info
property: "color"
from: "red"
to: "blue"
duration: 1000
running: true
loops: Animation.Infinite
easing.type: Easing.InOutQuad
}
}
}
}
}

View File

@ -1,262 +0,0 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Controls
import FluentUI
import Controller
import QtQuick.Dialogs
FluWindow {
width: 680
height: 600
minimumWidth: 500
minimumHeight: 600
title:"ChatGPT"
onInitArgument:
(argument)=>{
scrollview.focus = true
}
ChatController{
id:controller
onResponseDataChanged: {
appendMessage(false,responseData)
}
}
ListModel{
id:model_message
ListElement{
isMy:false
text:"欢迎使用ChatGPT"
}
ListElement{
isMy:true
text:"好的3Q"
}
}
FluAppBar{
id:appbar
title:"ChatGPT"
width:parent.width
}
Component{
id:com_text
TextEdit {
id:item_text
text: message
wrapMode: Text.WrapAnywhere
readOnly: true
selectByMouse: true
selectByKeyboard: true
selectedTextColor: Qt.rgba(51,153,255,1)
color:FluColors.Black
selectionColor: {
if(FluTheme.dark){
return FluTheme.primaryColor.lighter
}else{
return FluTheme.primaryColor.dark
}
}
width: Math.min(list_message.width-200,600,implicitWidth)
TapHandler{
acceptedButtons: Qt.RightButton
onTapped: {
menu_item.showMenu(item_text.selectedText)
}
}
}
}
FluArea{
id:layout_content
anchors{
top: appbar.bottom
left: parent.left
right: parent.right
bottom: layout_bottom.top
margins: 10
}
color: FluTheme.dark ? Qt.rgba(39/255,39/255,39/255,1) : Qt.rgba(245/255,245/255,245/255,1)
ListView{
id:list_message
anchors.fill: parent
model:model_message
clip: true
ScrollBar.vertical: FluScrollBar {}
preferredHighlightBegin: 0
preferredHighlightEnd: 0
highlightMoveDuration: 0
header:Item{
width: list_message.width
height:20
}
footer:Item{
width: list_message.width
height:20
}
delegate: Item{
width: ListView.view.width
height: childrenRect.height
FluRectangle{
id:item_avatar
width: 30
height: 30
radius:[15,15,15,15]
anchors{
right: isMy ? parent.right : undefined
rightMargin: isMy ? 20 : undefined
left: isMy ? undefined : parent.left
leftMargin: isMy ? undefined : 20
top:parent.top
}
Image {
asynchronous: true
anchors.fill: parent
sourceSize: Qt.size(100,100)
source: isMy ? "qrc:/res/svg/avatar_2.svg" : "qrc:/res/image/logo_openai.png"
}
}
Rectangle{
id:item_layout_content
color: isMy ? "#FF95EC69" : "#FFFFFF"
width: item_msg_loader.width+10
height: item_msg_loader.height+10
radius: 3
anchors{
top: item_avatar.top
right: isMy ? item_avatar.left : undefined
rightMargin: isMy ? 10 : undefined
left: isMy ? undefined : item_avatar.right
leftMargin: isMy ? undefined : 10
}
Loader{
id:item_msg_loader
property var message: model.text
anchors.centerIn: parent
sourceComponent: com_text
}
}
Item{
id:item_layout_bottom
width: parent.width
anchors.top: item_layout_content.bottom
height: 20
}
}
}
}
FluArea{
id:layout_bottom
height: 90
anchors{
bottom: parent.bottom
bottomMargin: 10
left: parent.left
right: parent.right
leftMargin: 10
rightMargin: 10
}
ScrollView{
id:scrollview
anchors{
bottom: parent.bottom
left: parent.left
right: button_send.left
bottomMargin: 10
leftMargin: 10
rightMargin: 10
}
height: Math.min(textbox.implicitHeight,64)
FluMultilineTextBox{
id:textbox
focus:true
placeholderText: "请输入消息"
}
}
FluFilledButton{
id:button_send
text:controller.isLoading ? timer_loading.loadingText :"发送"
anchors{
bottom: parent.bottom
right: parent.right
bottomMargin: 10
rightMargin: 10
}
width: 60
disabled: controller.isLoading
onClicked:{
var text = textbox.text
appendMessage(true,text)
controller.sendMessage(text)
textbox.clear()
}
Timer{
id:timer_loading
property int count : 0
property string loadingText : ""
interval: 500
running: controller.isLoading
repeat: true
onTriggered: {
switch(count%3){
case 0:
loadingText = "."
break
case 1:
loadingText = ".."
break
case 2:
loadingText = "..."
break
default:
loadingText = ""
break
}
count++
}
}
}
}
FluMenu{
id:menu_item
focus: false
property string selectedText: ""
FluMenuItem{
text:"复制"
onClicked: {
controller.clipText(menu_item.selectedText)
showSuccess("复制成功")
}
}
function showMenu(text){
menu_item.selectedText = text
menu_item.popup()
}
}
function appendMessage(isMy,text){
model_message.append({isMy:isMy,text:text})
list_message.positionViewAtEnd()
}
}

View File

@ -1,49 +0,0 @@
import QtQuick
import QtQuick.Window
import QtQuick.Controls
import QtQuick.Layouts
import "qrc:///global/"
import FluentUI
FluWindow {
id:rootwindow
width: 1000
height: 640
title: "FluentUI"
minimumWidth: 520
minimumHeight: 460
FluAppBar{
id:appbar
z:10
showDark: true
width:parent.width
}
FluNavigationView{
id:nav_view
anchors.fill: parent
items: ItemsOriginal
footerItems:ItemsFooter
logo: "qrc:/res/image/favicon.ico"
z: 11
title:"FluentUI"
autoSuggestBox:FluAutoSuggestBox{
width: 280
anchors.centerIn: parent
iconSource: FluentIcons.Zoom
items: ItemsOriginal.getSearchData()
placeholderText: "查找"
onItemClicked:
(data)=>{
ItemsOriginal.startPageByItem(data)
}
}
Component.onCompleted: {
ItemsOriginal.navigationView = nav_view
nav_view.setCurrentIndex(0)
nav_view.push("qrc:/T_Home.qml")
}
}
}

View File

@ -1,37 +0,0 @@
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import FluentUI
FluWindow {
width: 640
height: 480
minimumWidth: 640
minimumHeight: 480
title:"视频播放器"
onInitArgument:
(argument)=>{
player.source = argument.source
}
FluAppBar{
id:appbar
title:"视频播放器"
width:parent.width
}
FluMediaPlayer{
id:player
anchors{
left: parent.left
right: parent.right
top: appbar.bottom
bottom: parent.bottom
}
}
}

View File

@ -1,162 +0,0 @@
<RCC>
<qresource prefix="/">
<file>App.qml</file>
<file>res/image/image_huoyin.webp</file>
<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>page/AboutPage.qml</file>
<file>page/MainPage.qml</file>
<file>page/LoginPage.qml</file>
<file>T_ToggleSwitch.qml</file>
<file>T_Typography.qml</file>
<file>T_Awesome.qml</file>
<file>T_Buttons.qml</file>
<file>T_Rectangle.qml</file>
<file>T_InfoBar.qml</file>
<file>T_Progress.qml</file>
<file>T_Slider.qml</file>
<file>T_TextBox.qml</file>
<file>T_Theme.qml</file>
<file>T_Dialog.qml</file>
<file>T_TreeView.qml</file>
<file>T_Expander.qml</file>
<file>T_TimePicker.qml</file>
<file>T_DatePicker.qml</file>
<file>T_MultiWindow.qml</file>
<file>T_Menu.qml</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>page/ChatPage.qml</file>
<file>T_Tooltip.qml</file>
<file>T_Badge.qml</file>
<file>T_CalendarPicker.qml</file>
<file>T_ColorPicker.qml</file>
<file>T_Carousel.qml</file>
<file>T_MediaPlayer.qml</file>
<file>T_TabView.qml</file>
<file>res/image/favicon.ico</file>
<file>T_Home.qml</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>T_CheckBox.qml</file>
<file>global/ItemsOriginal.qml</file>
<file>global/qmldir</file>
<file>global/ItemsFooter.qml</file>
<file>page/MediaPage.qml</file>
<file>T_FlipView.qml</file>
<file>T_Pivot.qml</file>
<file>component/CodeExpander.qml</file>
<file>T_TableView.qml</file>
<file>T_StatusView.qml</file>
</qresource>
</RCC>

44
example/qml/App.qml Normal file
View File

@ -0,0 +1,44 @@
import QtQuick
import QtQuick.Window
import QtQuick.Controls
import QtQuick.Layouts
import FluentUI
Window {
id: app
flags: Qt.SplashScreen
FluHttpInterceptor{
id:interceptor
function onIntercept(request){
if(request.method === "get"){
request.params["method"] = "get"
}
if(request.method === "post"){
request.params["method"] = "post"
}
request.headers["token"] ="yyds"
request.headers["os"] ="pc"
console.debug(JSON.stringify(request))
return request
}
}
Component.onCompleted: {
FluApp.init(app)
FluTheme.darkMode = FluThemeType.System
FluTheme.enableAnimation = true
FluApp.routes = {
"/":"qrc:/example/qml/window/MainWindow.qml",
"/about":"qrc:/example/qml/window/AboutWindow.qml",
"/login":"qrc:/example/qml/window/LoginWindow.qml",
"/hotload":"qrc:/example/qml/window/HotloadWindow.qml",
"/singleTaskWindow":"qrc:/example/qml/window/SingleTaskWindow.qml",
"/standardWindow":"qrc:/example/qml/window/StandardWindow.qml",
"/singleInstanceWindow":"qrc:/example/qml/window/SingleInstanceWindow.qml"
}
FluApp.initialRoute = "/"
FluApp.httpInterceptor = interceptor
FluApp.run()
}
}

View File

@ -0,0 +1,141 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Window
import QtQuick.Controls
import FluentUI
FluExpander{
id:control
property string code: ""
headerText: "Source"
contentHeight:content.height
focus: false
FluMultilineTextBox{
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
}
}
FluIconButton{
iconSource:FluentIcons.Copy
anchors{
right: parent.right
top: parent.top
rightMargin: 5
topMargin: 5
}
onClicked:{
FluTools.clipText(content.text)
showSuccess("复制成功")
}
}
function htmlEncode(e){
var i,s;
for(i in s={
"&":/&/g,//""//":/"/g,"'":/'/g,
"<":/</g,">":/>/g,"<br/>":/\n/g,
" ":/ /g," ":/\t/g
})e=e.replace(s[i],i);
return e;
}
function highlightQmlCode(code) {
// 定义 QML 关键字列表
var qmlKeywords = [
"FluTextButton",
"FluAppBar",
"FluAutoSuggestBox",
"FluBadge",
"FluButton",
"FluCalendarPicker",
"FluCalendarView",
"FluCarousel",
"FluCheckBox",
"FluColorPicker",
"FluColorView",
"FluComboBox",
"FluContentDialog",
"FluContentPage",
"FluDatePicker",
"FluDivider",
"FluDropDownButton",
"FluExpander",
"FluFilledButton",
"FluFlipView",
"FluFocusRectangle",
"FluIcon",
"FluIconButton",
"FluInfoBar",
"FluItem",
"FluMediaPlayer",
"FluMenu",
"FluMenuItem",
"FluMultilineTextBox",
"FluNavigationView",
"FluObject",
"FluPaneItem",
"FluPaneItemExpander",
"FluPaneItemHeader",
"FluPaneItemSeparator",
"FluPivot",
"FluPivotItem",
"FluProgressBar",
"FluProgressRing",
"FluRadioButton",
"FluRectangle",
"FluScrollablePage",
"FluScrollBar",
"FluShadow",
"FluSlider",
"FluTabView",
"FluText",
"FluTextArea",
"FluTextBox",
"FluTextBoxBackground",
"FluTextBoxMenu",
"FluTextButton",
"FluTextFiled",
"FluTimePicker",
"FluToggleSwitch",
"FluTooltip",
"FluTreeView",
"FluWindow",
"FluWindowResize",
"FluToggleButton",
"FluTableView",
"FluColors",
"FluTheme",
"FluStatusView",
"FluRatingControl",
"FluPasswordBox",
"FluBreadcrumbBar",
"FluCopyableText",
"FluAcrylic",
"FluRemoteLoader",
"FluMenuBar",
"FluPagination",
"FluRadioButtons",
"FluImage",
"FluSpinBox",
"FluHttp",
"FluWatermark"
];
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

@ -0,0 +1,63 @@
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,30 @@
pragma Singleton
import QtQuick
import FluentUI
FluObject{
property var navigationView
id:footer_items
FluPaneItemSeparator{}
FluPaneItem{
title:lang.about
icon:FluentIcons.Contact
tapFunc:function(){
FluApp.navigate("/about")
}
}
FluPaneItem{
title:lang.settings
icon:FluentIcons.Settings
onTap:{
navigationView.push("qrc:/example/qml/page/T_Settings.qml")
}
}
}

View File

@ -0,0 +1,409 @@
pragma Singleton
import QtQuick
import FluentUI
FluObject{
property var navigationView
FluPaneItem{
id:item_home
count: 9
title:lang.home
infoBadge:FluBadge{
count: item_home.count
}
icon:FluentIcons.Home
onTap:{
if(navigationView.getCurrentUrl()){
item_home.count = 0
}
navigationView.push("qrc:/example/qml/page/T_Home.qml")
}
}
FluPaneItemExpander{
title:lang.basic_input
icon:FluentIcons.CheckboxComposite
FluPaneItem{
id:item_buttons
count: 99
infoBadge:FluBadge{
count: item_buttons.count
}
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:{
item_buttons.count = 0
navigationView.push("qrc:/example/qml/page/T_Buttons.qml")
}
}
FluPaneItem{
id:item_text
title:"Text"
count: 5
infoBadge:FluBadge{
count: item_text.count
color: Qt.rgba(82/255,196/255,26/255,1)
}
onTap:{
item_text.count = 0
navigationView.push("qrc:/example/qml/page/T_Text.qml")
}
}
FluPaneItem{
title:"Image"
onTap:{
navigationView.push("qrc:/example/qml/page/T_Image.qml")
}
}
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")
}
}
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")
}
}
FluPaneItem{
title:"RadioButton"
onTap:{
navigationView.push("qrc:/example/qml/page/T_RadioButton.qml")
}
}
FluPaneItem{
title:"ToggleSwitch"
onTap:{
navigationView.push("qrc:/example/qml/page/T_ToggleSwitch.qml")
}
}
}
FluPaneItemExpander{
title:lang.form
icon:FluentIcons.GridView
FluPaneItem{
title:"TextBox"
onTap:{
navigationView.push("qrc:/example/qml/page/T_TextBox.qml")
}
}
FluPaneItem{
title:"TimePicker"
onTap:{
navigationView.push("qrc:/example/qml/page/T_TimePicker.qml")
}
}
FluPaneItem{
title:"DatePicker"
onTap:{
navigationView.push("qrc:/example/qml/page/T_DatePicker.qml")
}
}
FluPaneItem{
title:"CalendarPicker"
onTap:{
navigationView.push("qrc:/example/qml/page/T_CalendarPicker.qml")
}
}
FluPaneItem{
title:"ColorPicker"
onTap:{
navigationView.push("qrc:/example/qml/page/T_ColorPicker.qml")
}
}
}
FluPaneItemExpander{
title:lang.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")
}
}
FluPaneItem{
title:"Progress"
onTap:{
navigationView.push("qrc:/example/qml/page/T_Progress.qml")
}
}
FluPaneItem{
title:"RatingControl"
onTap:{
navigationView.push("qrc:/example/qml/page/T_RatingControl.qml")
}
}
FluPaneItem{
title:"Badge"
onTap:{
navigationView.push("qrc:/example/qml/page/T_Badge.qml")
}
}
FluPaneItem{
title:"Rectangle"
onTap:{
navigationView.push("qrc:/example/qml/page/T_Rectangle.qml")
}
}
FluPaneItem{
title:"StatusView"
onTap:{
navigationView.push("qrc:/example/qml/page/T_StatusView.qml")
}
}
FluPaneItem{
title:"Carousel"
onTap:{
navigationView.push("qrc:/example/qml/page/T_Carousel.qml")
}
}
FluPaneItem{
title:"Expander"
onTap:{
navigationView.push("qrc:/example/qml/page/T_Expander.qml")
}
}
FluPaneItem{
title:"Watermark"
onTap:{
navigationView.push("qrc:/example/qml/page/T_Watermark.qml")
}
}
}
FluPaneItemExpander{
title:lang.popus
icon:FluentIcons.ButtonMenu
FluPaneItem{
title:"Dialog"
onTap:{
navigationView.push("qrc:/example/qml/page/T_Dialog.qml")
}
}
FluPaneItem{
id:item_combobox
title:"ComboBox"
count: 9
infoBadge:FluBadge{
count: item_combobox.count
color: Qt.rgba(250/255,173/255,20/255,1)
}
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")
}
}
FluPaneItem{
title:"Menu"
onTap:{
navigationView.push("qrc:/example/qml/page/T_Menu.qml")
}
}
}
FluPaneItemExpander{
title:lang.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")
}
}
FluPaneItem{
title:"BreadcrumbBar"
onTap:{
navigationView.push("qrc:/example/qml/page/T_BreadcrumbBar.qml")
}
}
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")
}
}
FluPaneItem{
title:"TreeView"
onTap:{
navigationView.push("qrc:/example/qml/page/T_TreeView.qml")
}
}
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")
}
}
FluPaneItem{
title:"Pagination"
onTap:{
navigationView.push("qrc:/example/qml/page/T_Pagination.qml")
}
}
FluPaneItem{
title:"MultiWindow"
onTap:{
navigationView.push("qrc:/example/qml/page/T_MultiWindow.qml")
}
}
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")
}
}
}
FluPaneItemExpander{
title:lang.theming
icon:FluentIcons.Brightness
FluPaneItem{
title:"Acrylic"
onTap:{
navigationView.push("qrc:/example/qml/page/T_Acrylic.qml")
}
}
FluPaneItem{
title:"Theme"
onTap:{
navigationView.push("qrc:/example/qml/page/T_Theme.qml")
}
}
FluPaneItem{
title:"Typography"
onTap:{
navigationView.push("qrc:/example/qml/page/T_Typography.qml")
}
}
FluPaneItem{
title:"Awesome"
onTap:{
navigationView.push("qrc:/example/qml/page/T_Awesome.qml")
}
}
}
FluPaneItemExpander{
title:lang.other
icon:FluentIcons.Shop
FluPaneItem{
title:"Http"
onTap:{
navigationView.push("qrc:/example/qml/page/T_Http.qml")
}
}
FluPaneItem{
id:item_other
title:"RemoteLoader"
count: 99
infoBadge:FluBadge{
count: item_other.count
color: Qt.rgba(82/255,196/255,26/255,1)
}
onTap:{
item_other.count = 0
navigationView.push("qrc:/example/qml/page/T_RemoteLoader.qml")
}
}
FluPaneItem{
title:"HotLoader"
tapFunc:function(){
FluApp.navigate("/hotload")
}
}
}
function getRecentlyAddedData(){
var arr = []
for(var i=0;i<children.length;i++){
var item = children[i]
if(item instanceof FluPaneItem && item.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 })
return arr
}
function getRecentlyUpdatedData(){
var arr = []
var items = navigationView.getItems();
for(var i=0;i<items.length;i++){
var item = items[i]
if(item instanceof FluPaneItem && item.recentlyUpdated){
arr.push(item)
}
}
return arr
}
function getSearchData(){
var arr = []
var items = navigationView.getItems();
for(var i=0;i<items.length;i++){
var item = items[i]
if(item instanceof FluPaneItem){
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
}
function startPageByItem(data){
navigationView.startPageByItem(data)
}
}

View File

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

View File

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

View File

@ -0,0 +1,114 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Window
import QtQuick.Controls
import FluentUI
import "qrc:///example/qml/component"
FluScrollablePage{
title:"Acrylic"
RowLayout{
spacing: 10
Layout.topMargin: 20
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
}
}
FluArea{
Layout.fillWidth: true
height: 1200/4+20
paddings: 10
Layout.topMargin: 10
FluRectangle{
width: 1920/4
height: 1200/4
radius:[15,15,15,15]
Image {
id:image
asynchronous: true
source: "qrc:/example/res/image/bg_scenic.png"
anchors.fill: parent
sourceSize: Qt.size(2*width,2*height)
}
FluAcrylic {
id:acrylic
target: image
width: 200
height: 200
tintOpacity: slider_tint_opacity.value/100
tintColor: color_picker.colorValue
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
}
MouseArea {
property point clickPos: Qt.point(0,0)
id:drag_area
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
}
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -1
code:'Image{
id:image
width: 800
height: 600
source: "qrc:/example/res/image/image_huoyin.webp"
radius: 8
}
FluAcrylic{
target:image
width: 100
height: 100
anchors.centerIn: parent
}
}'
}
}

View File

@ -1,4 +1,4 @@
import QtQuick import QtQuick
import QtQuick.Controls import QtQuick.Controls
import QtQuick.Layouts import QtQuick.Layouts
import QtQuick.Window import QtQuick.Window
@ -8,10 +8,6 @@ FluContentPage {
title:"Awesome" title:"Awesome"
leftPadding:10
rightPadding:10
bottomPadding:20
FluTextBox{ FluTextBox{
id:text_box id:text_box
placeholderText: "请输入关键字" placeholderText: "请输入关键字"
@ -37,6 +33,7 @@ FluContentPage {
cellWidth: 80 cellWidth: 80
cellHeight: 80 cellHeight: 80
clip: true clip: true
boundsBehavior: GridView.StopAtBounds
model:FluApp.awesomelist() model:FluApp.awesomelist()
ScrollBar.vertical: FluScrollBar {} ScrollBar.vertical: FluScrollBar {}
anchors{ anchors{
@ -55,7 +52,7 @@ FluContentPage {
anchors.horizontalCenter: parent.horizontalCenter anchors.horizontalCenter: parent.horizontalCenter
onClicked: { onClicked: {
var text ="FluentIcons."+modelData.name; var text ="FluentIcons."+modelData.name;
FluApp.clipText(text) FluTools.clipText(text)
showSuccess("您复制了 "+text) showSuccess("您复制了 "+text)
} }
} }

View File

@ -1,19 +1,14 @@
import QtQuick import QtQuick
import QtQuick.Layouts import QtQuick.Layouts
import QtQuick.Window import QtQuick.Window
import QtQuick.Controls import QtQuick.Controls
import FluentUI import FluentUI
import "./component" import "qrc:///example/qml/component"
FluScrollablePage{ FluScrollablePage{
title:"Badge" title:"Badge"
leftPadding:10
rightPadding:10
bottomPadding:20
spacing: 0
FluArea{ FluArea{
Layout.fillWidth: true Layout.fillWidth: true
Layout.topMargin: 20 Layout.topMargin: 20
@ -38,6 +33,8 @@ FluScrollablePage{
radius: 8 radius: 8
color: Qt.rgba(191/255,191/255,191/255,1) color: Qt.rgba(191/255,191/255,191/255,1)
FluBadge{ FluBadge{
topRight: true
showZero: true
count:0 count:0
} }
} }
@ -48,6 +45,8 @@ FluScrollablePage{
radius: 8 radius: 8
color: Qt.rgba(191/255,191/255,191/255,1) color: Qt.rgba(191/255,191/255,191/255,1)
FluBadge{ FluBadge{
topRight: true
showZero: true
count:5 count:5
} }
} }
@ -57,6 +56,8 @@ FluScrollablePage{
radius: 8 radius: 8
color: Qt.rgba(191/255,191/255,191/255,1) color: Qt.rgba(191/255,191/255,191/255,1)
FluBadge{ FluBadge{
topRight: true
showZero: true
count:50 count:50
} }
} }
@ -66,6 +67,8 @@ FluScrollablePage{
radius: 8 radius: 8
color: Qt.rgba(191/255,191/255,191/255,1) color: Qt.rgba(191/255,191/255,191/255,1)
FluBadge{ FluBadge{
topRight: true
showZero: true
count:100 count:100
} }
} }
@ -75,6 +78,8 @@ FluScrollablePage{
radius: 8 radius: 8
color: Qt.rgba(191/255,191/255,191/255,1) color: Qt.rgba(191/255,191/255,191/255,1)
FluBadge{ FluBadge{
topRight: true
showZero: true
isDot:true isDot:true
} }
} }
@ -84,6 +89,8 @@ FluScrollablePage{
radius: 8 radius: 8
color: Qt.rgba(191/255,191/255,191/255,1) color: Qt.rgba(191/255,191/255,191/255,1)
FluBadge{ FluBadge{
topRight: true
showZero: true
count:99 count:99
color: Qt.rgba(250/255,173/255,20/255,1) color: Qt.rgba(250/255,173/255,20/255,1)
} }
@ -94,6 +101,8 @@ FluScrollablePage{
radius: 8 radius: 8
color: Qt.rgba(191/255,191/255,191/255,1) color: Qt.rgba(191/255,191/255,191/255,1)
FluBadge{ FluBadge{
topRight: true
showZero: true
count:99 count:99
color: Qt.rgba(82/255,196/255,26/255,1) color: Qt.rgba(82/255,196/255,26/255,1)
} }
@ -103,6 +112,7 @@ FluScrollablePage{
} }
CodeExpander{ CodeExpander{
Layout.fillWidth: true Layout.fillWidth: true
Layout.topMargin: -1
code:'Rectangle{ code:'Rectangle{
width: 40 width: 40
height: 40 height: 40

View File

@ -0,0 +1,94 @@
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import QtQuick.Window
import FluentUI
import "qrc:///example/qml/component"
FluScrollablePage{
title:"BreadcurmbBar"
Component.onCompleted: {
var items = []
for(var i=0;i<10;i++){
items.push({title:"Item_"+(i+1)})
}
breadcrumb_1.items = items
breadcrumb_2.items = items
}
FluArea{
Layout.fillWidth: true
height: 68
paddings: 10
Layout.topMargin: 20
FluBreadcrumbBar{
id:breadcrumb_1
width:parent.width
anchors.verticalCenter: parent.verticalCenter
onClickItem:
(model)=>{
showSuccess(model.title)
}
}
}
FluArea{
Layout.fillWidth: true
height: 100
paddings: 10
Layout.topMargin: 20
ColumnLayout{
anchors.verticalCenter: parent.verticalCenter
width:parent.width
spacing: 10
FluFilledButton{
text:"Reset sample"
onClicked:{
var items = []
for(var i=0;i<10;i++){
items.push({title:"Item_"+(i+1)})
}
breadcrumb_2.items = items
}
}
FluBreadcrumbBar{
id:breadcrumb_2
separator:">"
spacing:8
textSize:18
Layout.fillWidth: true
onClickItem:
(model)=>{
//不是点击最后一个item元素
if(model.index+1!==count()){
breadcrumb_2.remove(model.index+1,count()-model.index-1)
}
showSuccess(model.title)
}
}
}
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -1
code:'FluBreadcrumbBar{
width:parent.width
separator:">"
spacing:8
textSize:18
onClickItem: (model)=>{
}
}'
}
}

View File

@ -1,17 +1,14 @@
import QtQuick import QtQuick
import QtQuick.Layouts import QtQuick.Layouts
import QtQuick.Window import QtQuick.Window
import QtQuick.Controls import QtQuick.Controls
import QtQuick.Controls.Basic
import FluentUI import FluentUI
import "./component" import "qrc:///example/qml/component"
FluScrollablePage{ FluScrollablePage{
title:"Buttons"
leftPadding:10 title:"Buttons"
rightPadding:10
bottomPadding:20
spacing: 0
FluText{ FluText{
Layout.topMargin: 20 Layout.topMargin: 20
@ -25,8 +22,9 @@ FluScrollablePage{
Layout.topMargin: 20 Layout.topMargin: 20
FluTextButton{ FluTextButton{
disabled:text_button_switch.selected disabled:text_button_switch.checked
text:"Text Button" text:"Text Button"
contentDescription: "文本按钮"
onClicked: { onClicked: {
showInfo("点击Text Button") showInfo("点击Text Button")
} }
@ -35,22 +33,18 @@ FluScrollablePage{
left: parent.left left: parent.left
} }
} }
FluToggleSwitch{
Row{ id:text_button_switch
spacing: 5
anchors{ anchors{
verticalCenter: parent.verticalCenter
right: parent.right right: parent.right
verticalCenter: parent.verticalCenter
} }
FluToggleSwitch{ text:"Disabled"
id:text_button_switch
Layout.alignment: Qt.AlignRight
text:"Disabled"
}
} }
} }
CodeExpander{ CodeExpander{
Layout.fillWidth: true Layout.fillWidth: true
Layout.topMargin: -1
code:'FluTextButton{ code:'FluTextButton{
text:"Text Button" text:"Text Button"
onClicked: { onClicked: {
@ -66,7 +60,7 @@ FluScrollablePage{
Layout.topMargin: 20 Layout.topMargin: 20
FluButton{ FluButton{
disabled:button_switch.selected disabled:button_switch.checked
text:"Standard Button" text:"Standard Button"
onClicked: { onClicked: {
showInfo("点击StandardButton") showInfo("点击StandardButton")
@ -76,22 +70,18 @@ FluScrollablePage{
left: parent.left left: parent.left
} }
} }
FluToggleSwitch{
Row{ id:button_switch
spacing: 5
anchors{ anchors{
verticalCenter: parent.verticalCenter
right: parent.right right: parent.right
verticalCenter: parent.verticalCenter
} }
FluToggleSwitch{ text:"Disabled"
id:button_switch
Layout.alignment: Qt.AlignRight
text:"Disabled"
}
} }
} }
CodeExpander{ CodeExpander{
Layout.fillWidth: true Layout.fillWidth: true
Layout.topMargin: -1
code:'FluButton{ code:'FluButton{
text:"Standard Button" text:"Standard Button"
onClicked: { onClicked: {
@ -107,32 +97,28 @@ FluScrollablePage{
paddings: 10 paddings: 10
FluFilledButton{ FluFilledButton{
disabled:filled_button_switch.selected disabled:filled_button_switch.checked
text:"Filled Button" text:"Filled Button"
onClicked: { onClicked: {
showWarning("点击FilledButton") showWarning("点击FilledButton"+height)
} }
anchors{ anchors{
verticalCenter: parent.verticalCenter verticalCenter: parent.verticalCenter
left: parent.left left: parent.left
} }
} }
FluToggleSwitch{
Row{ id:filled_button_switch
spacing: 5
anchors{ anchors{
verticalCenter: parent.verticalCenter
right: parent.right right: parent.right
verticalCenter: parent.verticalCenter
} }
FluToggleSwitch{ text:"Disabled"
id:filled_button_switch
Layout.alignment: Qt.AlignRight
text:"Disabled"
}
} }
} }
CodeExpander{ CodeExpander{
Layout.fillWidth: true Layout.fillWidth: true
Layout.topMargin: -1
code:'FluFilledButton{ code:'FluFilledButton{
text:"Filled Button" text:"Filled Button"
onClicked: { onClicked: {
@ -148,36 +134,29 @@ FluScrollablePage{
paddings: 10 paddings: 10
FluToggleButton{ FluToggleButton{
disabled:toggle_button_switch.selected disabled:toggle_button_switch.checked
text:"Toggle Button" text:"Toggle Button"
onClicked: {
selected = !selected
}
anchors{ anchors{
verticalCenter: parent.verticalCenter verticalCenter: parent.verticalCenter
left: parent.left left: parent.left
} }
} }
FluToggleSwitch{
Row{ id:toggle_button_switch
spacing: 5
anchors{ anchors{
verticalCenter: parent.verticalCenter
right: parent.right right: parent.right
verticalCenter: parent.verticalCenter
} }
FluToggleSwitch{ text:"Disabled"
id:toggle_button_switch
Layout.alignment: Qt.AlignRight
text:"Disabled"
}
} }
} }
CodeExpander{ CodeExpander{
Layout.fillWidth: true Layout.fillWidth: true
Layout.topMargin: -1
code:'FluToggleButton{ code:'FluToggleButton{
text:"Toggle Button" text:"Toggle Button"
onClicked: { onClicked: {
selected = !selected checked = !checked
} }
}' }'
} }
@ -190,7 +169,7 @@ FluScrollablePage{
Layout.topMargin: 20 Layout.topMargin: 20
FluIconButton{ FluIconButton{
iconSource:FluentIcons.ChromeCloseContrast iconSource:FluentIcons.ChromeCloseContrast
disabled:icon_button_switch.selected disabled:icon_button_switch.checked
iconSize: 15 iconSize: 15
anchors{ anchors{
verticalCenter: parent.verticalCenter verticalCenter: parent.verticalCenter
@ -200,22 +179,18 @@ FluScrollablePage{
showSuccess("点击IconButton") showSuccess("点击IconButton")
} }
} }
FluToggleSwitch{
Row{ id:icon_button_switch
spacing: 5
anchors{ anchors{
verticalCenter: parent.verticalCenter
right: parent.right right: parent.right
verticalCenter: parent.verticalCenter
} }
FluToggleSwitch{ text:"Disabled"
id:icon_button_switch
Layout.alignment: Qt.AlignRight
text:"Disabled"
}
} }
} }
CodeExpander{ CodeExpander{
Layout.fillWidth: true Layout.fillWidth: true
Layout.topMargin: -1
code:'FluIconButton{ code:'FluIconButton{
iconSource:FluentIcons.ChromeCloseContrast iconSource:FluentIcons.ChromeCloseContrast
onClicked: { onClicked: {
@ -230,58 +205,54 @@ FluScrollablePage{
paddings: 10 paddings: 10
Layout.topMargin: 20 Layout.topMargin: 20
FluDropDownButton{ FluDropDownButton{
disabled:drop_down_button_switch.selected disabled:drop_down_button_switch.checked
text:"DropDownButton" text:"DropDownButton"
anchors{ anchors{
verticalCenter: parent.verticalCenter verticalCenter: parent.verticalCenter
left: parent.left left: parent.left
} }
items:[ FluMenuItem{
FluMenuItem{ text:"Menu_1"
text:"Menu_1" }
}, FluMenuItem{
FluMenuItem{ text:"Menu_2"
text:"Menu_2" }
}, FluMenuItem{
FluMenuItem{ text:"Menu_3"
text:"Menu_3" }
}, FluMenuItem{
FluMenuItem{ text:"Menu_4"
text:"Menu_4" onClicked: {
} }
] }
} }
Row{ FluToggleSwitch{
spacing: 5 id:drop_down_button_switch
anchors{ anchors{
verticalCenter: parent.verticalCenter
right: parent.right right: parent.right
verticalCenter: parent.verticalCenter
} }
FluToggleSwitch{ text:"Disabled"
id:drop_down_button_switch
Layout.alignment: Qt.AlignRight
text:"Disabled"
}
} }
} }
CodeExpander{ CodeExpander{
Layout.fillWidth: true Layout.fillWidth: true
Layout.topMargin: -1
code:'FluDropDownButton{ code:'FluDropDownButton{
text:"DropDownButton" text:"DropDownButton"
items:[ FluMenuItem{
FluMenuItem{ text:"Menu_1"
text:"Menu_1" },
}, FluMenuItem{
FluMenuItem{ text:"Menu_2"
text:"Menu_2" },
}, FluMenuItem{
FluMenuItem{ text:"Menu_3"
text:"Menu_3" },
}, FluMenuItem{
FluMenuItem{ text:"Menu_4"
text:"Menu_4" }
}
]
}' }'
} }
@ -290,45 +261,39 @@ FluScrollablePage{
height: 100 height: 100
paddings: 10 paddings: 10
Layout.topMargin: 20 Layout.topMargin: 20
ColumnLayout{ FluRadioButtons{
spacing: 8 spacing: 8
anchors{ anchors{
verticalCenter: parent.verticalCenter verticalCenter: parent.verticalCenter
left: parent.left left: parent.left
} }
Repeater{ FluRadioButton{
id:repeater disabled:radio_button_switch.checked
property int selecIndex : 0 text:"Radio Button_1"
model: 3 }
delegate: FluRadioButton{ FluRadioButton{
selected : repeater.selecIndex===index disabled:radio_button_switch.checked
disabled:radio_button_switch.selected text:"Radio Button_2"
text:"Radio Button_"+index }
onClicked:{ FluRadioButton{
repeater.selecIndex = index disabled:radio_button_switch.checked
} text:"Radio Button_3"
}
} }
} }
FluToggleSwitch{
id:radio_button_switch
Row{
spacing: 5
anchors{ anchors{
verticalCenter: parent.verticalCenter
right: parent.right right: parent.right
verticalCenter: parent.verticalCenter
} }
FluToggleSwitch{ text:"Disabled"
id:radio_button_switch
Layout.alignment: Qt.AlignRight
text:"Disabled"
}
} }
} }
CodeExpander{ CodeExpander{
Layout.fillWidth: true Layout.fillWidth: true
Layout.topMargin: -1
code:'FluRadioButton{ code:'FluRadioButton{
selected:true checked:true
text:"Text Button" text:"Text Button"
onClicked: { onClicked: {
@ -336,37 +301,4 @@ FluScrollablePage{
}' }'
} }
FluArea{
Layout.fillWidth: true
height: 68
paddings: 10
Layout.topMargin: 20
FluCheckBox{
disabled:check_box_switch.selected
text:"Check Box"
anchors{
verticalCenter: parent.verticalCenter
left: parent.left
}
}
Row{
spacing: 5
anchors{
verticalCenter: parent.verticalCenter
right: parent.right
}
FluToggleSwitch{
id:check_box_switch
Layout.alignment: Qt.AlignRight
text:"Disabled"
}
}
}
CodeExpander{
Layout.fillWidth: true
code:'FluCheckBox{
text:"Check Box"
}'
}
} }

View File

@ -1,17 +1,13 @@
import QtQuick import QtQuick
import QtQuick.Controls import QtQuick.Controls
import QtQuick.Layouts import QtQuick.Layouts
import QtQuick.Window import QtQuick.Window
import FluentUI import FluentUI
import "./component" import "qrc:///example/qml/component"
FluScrollablePage{ FluScrollablePage{
title:"CalendarPicker" title:"CalendarPicker"
leftPadding:10
rightPadding:10
bottomPadding:20
spacing: 0
FluArea{ FluArea{
Layout.fillWidth: true Layout.fillWidth: true
@ -23,6 +19,7 @@ FluScrollablePage{
} }
CodeExpander{ CodeExpander{
Layout.fillWidth: true Layout.fillWidth: true
Layout.topMargin: -1
code:'FluCalendarView{ code:'FluCalendarView{
}' }'
@ -44,6 +41,7 @@ FluScrollablePage{
} }
CodeExpander{ CodeExpander{
Layout.fillWidth: true Layout.fillWidth: true
Layout.topMargin: -1
code:'FluCalendarPicker{ code:'FluCalendarPicker{
}' }'

View File

@ -1,17 +1,13 @@
import QtQuick import QtQuick
import QtQuick.Layouts import QtQuick.Layouts
import QtQuick.Window import QtQuick.Window
import QtQuick.Controls import QtQuick.Controls
import FluentUI import FluentUI
import "./component" import "qrc:///example/qml/component"
FluScrollablePage{ FluScrollablePage{
title:"Carousel" title:"Carousel"
leftPadding:10
rightPadding:10
bottomPadding:20
spacing: 0
FluArea{ FluArea{
Layout.fillWidth: true Layout.fillWidth: true
@ -32,18 +28,19 @@ FluScrollablePage{
Layout.topMargin: 20 Layout.topMargin: 20
Layout.leftMargin: 5 Layout.leftMargin: 5
Component.onCompleted: { Component.onCompleted: {
carousel.setData([{url:"qrc:/res/image/banner_1.jpg"},{url:"qrc:/res/image/banner_2.jpg"},{url:"qrc:/res/image/banner_3.jpg"}]) 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"}])
} }
} }
} }
} }
CodeExpander{ CodeExpander{
Layout.fillWidth: true Layout.fillWidth: true
Layout.topMargin: -1
code:'FluCarousel{ code:'FluCarousel{
width: 400 width: 400
height: 300 height: 300
Component.onCompleted: { Component.onCompleted: {
setData([{url:"qrc:/res/image/banner_1.jpg"},{url:"qrc:/res/image/banner_2.jpg"},{url:"qrc:/res/image/banner_3.jpg"}]) 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"}])
} }
}' }'
} }

View File

@ -0,0 +1,50 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Window
import QtQuick.Controls
import FluentUI
import "qrc:///example/qml/component"
FluScrollablePage{
title:"CheckBox"
FluArea{
Layout.fillWidth: true
height: 68
paddings: 10
Layout.topMargin: 20
Row{
spacing: 30
anchors.verticalCenter: parent.verticalCenter
FluCheckBox{
disabled: check_box_switch.checked
}
FluCheckBox{
disabled: check_box_switch.checked
text:"Right"
}
FluCheckBox{
disabled: check_box_switch.checked
text:"Left"
textRight: false
}
}
FluToggleSwitch{
id:check_box_switch
anchors{
right: parent.right
verticalCenter: parent.verticalCenter
}
text:"Disabled"
}
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -1
code:'FluCheckBox{
text:"Text"
}'
}
}

View File

@ -1,17 +1,13 @@
import QtQuick import QtQuick
import QtQuick.Controls import QtQuick.Controls
import QtQuick.Layouts import QtQuick.Layouts
import QtQuick.Window import QtQuick.Window
import FluentUI import FluentUI
import "./component" import "qrc:///example/qml/component"
FluScrollablePage{ FluScrollablePage{
title:"ColorPicker" title:"ColorPicker"
leftPadding:10
rightPadding:10
bottomPadding:20
spacing: 0
FluArea{ FluArea{
Layout.fillWidth: true Layout.fillWidth: true
@ -27,8 +23,6 @@ FluScrollablePage{
text:"此颜色组件是Github上的开源项目" text:"此颜色组件是Github上的开源项目"
} }
FluTextButton{ FluTextButton{
leftPadding: 0
rightPadding: 0
text:"https://github.com/rshest/qml-colorpicker" text:"https://github.com/rshest/qml-colorpicker"
onClicked: { onClicked: {
Qt.openUrlExternally(text) Qt.openUrlExternally(text)
@ -41,6 +35,7 @@ FluScrollablePage{
} }
CodeExpander{ CodeExpander{
Layout.fillWidth: true Layout.fillWidth: true
Layout.topMargin: -1
code:'FluColorView{ code:'FluColorView{
}' }'
@ -64,6 +59,7 @@ FluScrollablePage{
} }
CodeExpander{ CodeExpander{
Layout.fillWidth: true Layout.fillWidth: true
Layout.topMargin: -1
code:'FluColorPicker{ code:'FluColorPicker{
}' }'

View File

@ -0,0 +1,81 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Window
import QtQuick.Controls
import FluentUI
import "qrc:///example/qml/component"
FluScrollablePage{
title:"ComboBox"
FluArea{
Layout.fillWidth: true
height: 80
paddings: 5
Layout.topMargin: 20
Column{
spacing: 5
anchors.verticalCenter: parent.verticalCenter
FluText{
text: "editable=false"
x:10
}
FluComboBox {
model: ListModel {
id: model_1
ListElement { text: "Banana" }
ListElement { text: "Apple" }
ListElement { text: "Coconut" }
}
}
}
}
FluArea{
Layout.fillWidth: true
height: 80
paddings: 10
Layout.topMargin: 20
Column{
spacing: 5
anchors.verticalCenter: parent.verticalCenter
FluText{
text: "editable=true"
x:5
}
FluComboBox {
editable: true
font:FluTextStyle.BodyStrong
model: ListModel {
id: model_2
ListElement { text: "Banana" }
ListElement { text: "Apple" }
ListElement { text: "Coconut" }
}
onAccepted: {
if (find(editText) === -1)
model_2.append({text: editText})
}
}
}
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -1
code:'FluComboBox{
editable: true
model: ListModel {
id: model
ListElement { text: "Banana" }
ListElement { text: "Apple" }
ListElement { text: "Coconut" }
}
onAccepted: {
if (find(editText) === -1)
model.append({text: editText})
}
}'
}
}

View File

@ -1,17 +1,13 @@
import QtQuick import QtQuick
import QtQuick.Controls import QtQuick.Controls
import QtQuick.Layouts import QtQuick.Layouts
import QtQuick.Window import QtQuick.Window
import FluentUI import FluentUI
import "./component" import "qrc:///example/qml/component"
FluScrollablePage{ FluScrollablePage{
title:"TimePicker" title:"TimePicker"
leftPadding:10
rightPadding:10
bottomPadding:20
spacing: 0
FluArea{ FluArea{
Layout.fillWidth: true Layout.fillWidth: true
@ -27,11 +23,15 @@ FluScrollablePage{
text:"showYear=true" text:"showYear=true"
} }
FluDatePicker{ FluDatePicker{
onCurrentChanged: {
showSuccess(current.toLocaleDateString())
}
} }
} }
} }
CodeExpander{ CodeExpander{
Layout.fillWidth: true Layout.fillWidth: true
Layout.topMargin: -1
code:'FluDatePicker{ code:'FluDatePicker{
}' }'
@ -53,12 +53,15 @@ FluScrollablePage{
FluDatePicker{ FluDatePicker{
showYear:false showYear:false
onCurrentChanged: {
showSuccess(current.toLocaleDateString())
}
} }
} }
} }
CodeExpander{ CodeExpander{
Layout.fillWidth: true Layout.fillWidth: true
Layout.topMargin: -1
code:'FluDatePicker{ code:'FluDatePicker{
showYear:false showYear:false
}' }'

View File

@ -0,0 +1,118 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Window
import QtQuick.Controls
import FluentUI
import "qrc:///example/qml/component"
FluScrollablePage{
title:"Dialog"
FluArea{
Layout.fillWidth: true
height: 68
paddings: 10
Layout.topMargin: 20
FluButton{
anchors.verticalCenter: parent.verticalCenter
Layout.topMargin: 20
text:"Show Double Button Dialog"
onClicked: {
double_btn_dialog.open()
}
}
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -1
code:'FluContentDialog{
id:dialog
title:"友情提示"
message:"确定要退出程序么?"
negativeText:"取消"
buttonFlags: FluContentDialogType.NegativeButton | FluContentDialogType.PositiveButton
onNegativeClicked:{
showSuccess("点击取消按钮")
}
positiveText:"确定"
onPositiveClicked:{
showSuccess("点击确定按钮")
}
}
dialog.open()'
}
FluContentDialog{
id:double_btn_dialog
title:"友情提示"
message:"确定要退出程序么?"
buttonFlags: FluContentDialogType.NegativeButton | FluContentDialogType.PositiveButton
negativeText:"取消"
onNegativeClicked:{
showSuccess("点击取消按钮")
}
positiveText:"确定"
onPositiveClicked:{
showSuccess("点击确定按钮")
}
}
FluArea{
Layout.fillWidth: true
height: 68
paddings: 10
Layout.topMargin: 20
FluButton{
anchors.verticalCenter: parent.verticalCenter
Layout.topMargin: 20
text:"Show Triple Button Dialog"
onClicked: {
triple_btn_dialog.open()
}
}
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -1
code:'FluContentDialog{
id:dialog
title:"友情提示"
message:"确定要退出程序么?"
negativeText:"取消"
buttonFlags: FluContentDialogType.NeutralButton | FluContentDialogType.NegativeButton | FluContentDialogType.PositiveButton
negativeText:"取消"
onNegativeClicked:{
showSuccess("点击取消按钮")
}
positiveText:"确定"
onPositiveClicked:{
showSuccess("点击确定按钮")
}
neutralText:"最小化"
onNeutralClicked:{
showSuccess("点击最小化按钮")
}
}
dialog.open()'
}
FluContentDialog{
id:triple_btn_dialog
title:"友情提示"
message:"确定要退出程序么?"
buttonFlags: FluContentDialogType.NeutralButton | FluContentDialogType.NegativeButton | FluContentDialogType.PositiveButton
negativeText:"取消"
onNegativeClicked:{
showSuccess("点击取消按钮")
}
positiveText:"确定"
onPositiveClicked:{
showSuccess("点击确定按钮")
}
neutralText:"最小化"
onNeutralClicked:{
showSuccess("点击最小化按钮")
}
}
}

View File

@ -1,28 +1,24 @@
import QtQuick import QtQuick
import QtQuick.Controls import QtQuick.Controls
import QtQuick.Layouts import QtQuick.Layouts
import QtQuick.Window import QtQuick.Window
import FluentUI import FluentUI
import "./component" import "qrc:///example/qml/component"
FluScrollablePage{ FluScrollablePage{
title:"Expander" title:"Expander"
leftPadding:10
rightPadding:10
bottomPadding:20
spacing: 0
FluArea{ FluArea{
Layout.fillWidth: true Layout.fillWidth: true
height: layout_column.height+40 height: layout_column.height+20
paddings: 10 paddings: 10
Layout.topMargin: 20 Layout.topMargin: 20
Column{ Column{
id:layout_column id:layout_column
spacing: 15 spacing: 15
anchors{ anchors{
verticalCenter: parent.verticalCenter top:parent.top
left:parent.left left:parent.left
} }
@ -31,7 +27,7 @@ FluScrollablePage{
Layout.topMargin: 20 Layout.topMargin: 20
Item{ Item{
anchors.fill: parent anchors.fill: parent
ColumnLayout{ FluRadioButtons{
spacing: 8 spacing: 8
anchors{ anchors{
top: parent.top top: parent.top
@ -39,17 +35,14 @@ FluScrollablePage{
topMargin: 15 topMargin: 15
leftMargin: 15 leftMargin: 15
} }
Repeater{ FluRadioButton{
id:repeater text:"Radio Button_1"
property int selecIndex : 0 }
model: 3 FluRadioButton{
delegate: FluRadioButton{ text:"Radio Button_2"
selected : repeater.selecIndex===index }
text:"Radio Button_"+index FluRadioButton{
onClicked:{ text:"Radio Button_3"
repeater.selecIndex = index
}
}
} }
} }
} }
@ -77,12 +70,12 @@ FluScrollablePage{
} }
} }
} }
} }
} }
CodeExpander{ CodeExpander{
Layout.fillWidth: true Layout.fillWidth: true
Layout.topMargin: -1
code:'FluExpander{ code:'FluExpander{
headerText:"打开一个单选框" headerText:"打开一个单选框"
Item{ Item{

View File

@ -1,17 +1,13 @@
import QtQuick import QtQuick
import QtQuick.Controls import QtQuick.Controls
import QtQuick.Layouts import QtQuick.Layouts
import QtQuick.Window import QtQuick.Window
import FluentUI import FluentUI
import "./component" import "qrc:///example/qml/component"
FluScrollablePage{ FluScrollablePage{
title:"FlipView" title:"FlipView"
leftPadding:10
rightPadding:10
bottomPadding:20
spacing: 0
FluArea{ FluArea{
Layout.fillWidth: true Layout.fillWidth: true
@ -25,17 +21,17 @@ FluScrollablePage{
} }
FluFlipView{ FluFlipView{
Image{ Image{
source: "qrc:/res/image/banner_1.jpg" source: "qrc:/example/res/image/banner_1.jpg"
asynchronous: true asynchronous: true
fillMode:Image.PreserveAspectCrop fillMode:Image.PreserveAspectCrop
} }
Image{ Image{
source: "qrc:/res/image/banner_2.jpg" source: "qrc:/example/res/image/banner_2.jpg"
asynchronous: true asynchronous: true
fillMode:Image.PreserveAspectCrop fillMode:Image.PreserveAspectCrop
} }
Image{ Image{
source: "qrc:/res/image/banner_3.jpg" source: "qrc:/example/res/image/banner_3.jpg"
asynchronous: true asynchronous: true
fillMode:Image.PreserveAspectCrop fillMode:Image.PreserveAspectCrop
} }
@ -44,19 +40,20 @@ FluScrollablePage{
} }
CodeExpander{ CodeExpander{
Layout.fillWidth: true Layout.fillWidth: true
Layout.topMargin: -1
code:'FluFlipView{ code:'FluFlipView{
Image{ Image{
source: "qrc:/res/image/banner_1.jpg" source: "qrc:/example/res/image/banner_1.jpg"
asynchronous: true asynchronous: true
fillMode:Image.PreserveAspectCrop fillMode:Image.PreserveAspectCrop
} }
Image{ Image{
source: "qrc:/res/image/banner_1.jpg" source: "qrc:/example/res/image/banner_1.jpg"
asynchronous: true asynchronous: true
fillMode:Image.PreserveAspectCrop fillMode:Image.PreserveAspectCrop
} }
Image{ Image{
source: "qrc:/res/image/banner_1.jpg" source: "qrc:/example/res/image/banner_1.jpg"
asynchronous: true asynchronous: true
fillMode:Image.PreserveAspectCrop fillMode:Image.PreserveAspectCrop
} }
@ -77,18 +74,17 @@ FluScrollablePage{
FluFlipView{ FluFlipView{
vertical:true vertical:true
Image{ Image{
source: "qrc:/res/image/banner_1.jpg" source: "qrc:/example/res/image/banner_1.jpg"
asynchronous: true
sourceSize: Qt.size(400,300)
fillMode:Image.PreserveAspectCrop
}
Image{
source: "qrc:/res/image/banner_2.jpg"
asynchronous: true asynchronous: true
fillMode:Image.PreserveAspectCrop fillMode:Image.PreserveAspectCrop
} }
Image{ Image{
source: "qrc:/res/image/banner_3.jpg" source: "qrc:/example/res/image/banner_2.jpg"
asynchronous: true
fillMode:Image.PreserveAspectCrop
}
Image{
source: "qrc:/example/res/image/banner_3.jpg"
asynchronous: true asynchronous: true
fillMode:Image.PreserveAspectCrop fillMode:Image.PreserveAspectCrop
} }
@ -97,20 +93,21 @@ FluScrollablePage{
} }
CodeExpander{ CodeExpander{
Layout.fillWidth: true Layout.fillWidth: true
Layout.topMargin: -1
code:'FluFlipView{ code:'FluFlipView{
vertical:true vertical:true
Image{ Image{
source: "qrc:/res/image/banner_1.jpg" source: "qrc:/example/res/image/banner_1.jpg"
asynchronous: true asynchronous: true
fillMode:Image.PreserveAspectCrop fillMode:Image.PreserveAspectCrop
} }
Image{ Image{
source: "qrc:/res/image/banner_1.jpg" source: "qrc:/example/res/image/banner_1.jpg"
asynchronous: true asynchronous: true
fillMode:Image.PreserveAspectCrop fillMode:Image.PreserveAspectCrop
} }
Image{ Image{
source: "qrc:/res/image/banner_1.jpg" source: "qrc:/example/res/image/banner_1.jpg"
asynchronous: true asynchronous: true
fillMode:Image.PreserveAspectCrop fillMode:Image.PreserveAspectCrop
} }

View File

@ -1,36 +1,34 @@
import QtQuick import QtQuick
import QtQuick.Layouts import QtQuick.Layouts
import QtQuick.Window import QtQuick.Window
import QtQuick.Controls import QtQuick.Controls
import "qrc:///global/" import "qrc:///example/qml/global"
import FluentUI import FluentUI
FluScrollablePage{ FluScrollablePage{
launchMode: FluPageType.SingleTask
leftPadding:10 animDisabled: true
rightPadding:0
bottomPadding:20
ListModel{ ListModel{
id:model_header id:model_header
ListElement{ ListElement{
icon:"qrc:/res/image/ic_home_github.png" icon:"qrc:/example/res/image/ic_home_github.png"
title:"FluentUI GitHub" title:"FluentUI GitHub"
desc:"The latest FluentUI controls and styles for your applications." desc:"The latest FluentUI controls and styles for your applications."
url:"https://github.com/zhuzichu520/FluentUI" url:"https://github.com/zhuzichu520/FluentUI"
} }
} }
Item{ Item{
Layout.fillWidth: true Layout.fillWidth: true
height: 320 height: 320
Image { Image {
id: bg
fillMode:Image.PreserveAspectCrop fillMode:Image.PreserveAspectCrop
anchors.fill: parent anchors.fill: parent
verticalAlignment: Qt.AlignTop verticalAlignment: Qt.AlignTop
source: "qrc:/res/image/bg_home_header.png" source: "qrc:/example/res/image/bg_home_header.png"
} }
Rectangle{ Rectangle{
anchors.fill: parent anchors.fill: parent
@ -41,7 +39,7 @@ FluScrollablePage{
} }
FluText{ FluText{
text:"FluentUI Gallery" text:"FluentUI Gallery"
fontStyle: FluText.TitleLarge font: FluTextStyle.TitleLarge
anchors{ anchors{
top: parent.top top: parent.top
left: parent.left left: parent.left
@ -51,6 +49,7 @@ FluScrollablePage{
} }
ListView{ ListView{
id: list
anchors{ anchors{
left: parent.left left: parent.left
right: parent.right right: parent.right
@ -66,13 +65,20 @@ FluScrollablePage{
} }
clip: false clip: false
delegate:Item{ delegate:Item{
id: control
width: 220 width: 220
height: 240 height: 240
FluArea{ FluItem{
radius: 8 radius: [8,8,8,8]
width: 200 width: 200
height: 220 height: 220
anchors.centerIn: parent anchors.centerIn: parent
FluAcrylic{
anchors.fill: parent
tintColor: FluTheme.dark ? Qt.rgba(0,0,0,1) : Qt.rgba(1,1,1,1)
target: bg
targetRect: Qt.rect(list.x-list.contentX+10+(control.width)*index,list.y+10,width,height)
}
Rectangle{ Rectangle{
anchors.fill: parent anchors.fill: parent
radius: 8 radius: 8
@ -90,7 +96,6 @@ FluScrollablePage{
} }
} }
} }
ColumnLayout{ ColumnLayout{
Image { Image {
Layout.topMargin: 20 Layout.topMargin: 20
@ -101,7 +106,7 @@ FluScrollablePage{
} }
FluText{ FluText{
text: model.title text: model.title
fontStyle: FluText.Body font: FluTextStyle.Body
Layout.topMargin: 20 Layout.topMargin: 20
Layout.leftMargin: 20 Layout.leftMargin: 20
} }
@ -184,7 +189,7 @@ FluScrollablePage{
FluText{ FluText{
id:item_title id:item_title
text:modelData.title text:modelData.title
fontStyle: FluText.BodyStrong font: FluTextStyle.BodyStrong
anchors{ anchors{
left: item_icon.right left: item_icon.right
leftMargin: 20 leftMargin: 20
@ -198,7 +203,7 @@ FluScrollablePage{
color:FluColors.Grey120 color:FluColors.Grey120
wrapMode: Text.WrapAnywhere wrapMode: Text.WrapAnywhere
elide: Text.ElideRight elide: Text.ElideRight
fontStyle: FluText.Caption font: FluTextStyle.Caption
maximumLineCount: 2 maximumLineCount: 2
anchors{ anchors{
left: item_title.left left: item_title.left
@ -236,7 +241,7 @@ FluScrollablePage{
FluText{ FluText{
text: "Recently added samples" text: "Recently added samples"
fontStyle: FluText.Title font: FluTextStyle.Title
Layout.topMargin: 20 Layout.topMargin: 20
Layout.leftMargin: 20 Layout.leftMargin: 20
} }
@ -253,7 +258,7 @@ FluScrollablePage{
FluText{ FluText{
text: "Recently updated samples" text: "Recently updated samples"
fontStyle: FluText.Title font: FluTextStyle.Title
Layout.topMargin: 20 Layout.topMargin: 20
Layout.leftMargin: 20 Layout.leftMargin: 20
} }

214
example/qml/page/T_Http.qml Normal file
View File

@ -0,0 +1,214 @@
import QtQuick
import Qt.labs.platform
import QtQuick.Layouts
import QtQuick.Window
import QtQuick.Controls
import QtQuick.Dialogs
import FluentUI
import "qrc:///example/qml/component"
FluContentPage{
title:"Http"
FluHttp{
id:http
}
Flickable{
id:layout_flick
width: 160
clip: true
anchors{
top: parent.top
topMargin: 20
bottom: parent.bottom
left: parent.left
}
ScrollBar.vertical: FluScrollBar {}
contentHeight:layout_column.height
Column{
spacing: 2
id:layout_column
width: parent.width
FluButton{
implicitWidth: parent.width
implicitHeight: 36
text: "Get请求"
onClicked: {
var callable = {}
callable.onStart = function(){
showLoading()
}
callable.onFinish = function(){
hideLoading()
}
callable.onSuccess = function(result){
text_info.text = result
console.debug(result)
}
callable.onError = function(status,errorString){
console.debug(status+";"+errorString)
}
http.get("https://httpbingo.org/get",callable)
}
}
FluButton{
implicitWidth: parent.width
implicitHeight: 36
text: "Post表单请求"
onClicked: {
var callable = {}
callable.onStart = function(){
showLoading()
}
callable.onFinish = function(){
hideLoading()
}
callable.onSuccess = function(result){
text_info.text = result
console.debug(result)
}
callable.onError = function(status,errorString){
console.debug(status+";"+errorString)
}
var param = {}
param.custname = "朱子楚"
param.custtel = "1234567890"
param.custemail = "zhuzichu520@gmail.com"
http.post("https://httpbingo.org/post",callable,param)
}
}
FluButton{
implicitWidth: parent.width
implicitHeight: 36
text: "Post Json请求"
onClicked: {
var callable = {}
callable.onStart = function(){
showLoading()
}
callable.onFinish = function(){
hideLoading()
}
callable.onSuccess = function(result){
text_info.text = result
console.debug(result)
}
callable.onError = function(status,errorString){
console.debug(status+";"+errorString)
}
var param = {}
param.custname = "朱子楚"
param.custtel = "1234567890"
param.custemail = "zhuzichu520@gmail.com"
http.postJson("https://httpbingo.org/post",callable,param)
}
}
FluButton{
implicitWidth: parent.width
implicitHeight: 36
text: "Post String请求"
onClicked: {
var callable = {}
callable.onStart = function(){
showLoading()
}
callable.onFinish = function(){
hideLoading()
}
callable.onSuccess = function(result){
text_info.text = result
console.debug(result)
}
callable.onError = function(status,errorString){
console.debug(status+";"+errorString)
}
var param = "我命由我不由天"
http.postString("https://httpbingo.org/post",callable,param)
}
}
FluButton{
id:btn_download
implicitWidth: parent.width
implicitHeight: 36
text: "下载文件"
onClicked: {
file_dialog.open()
}
}
}
}
FolderDialog {
id: file_dialog
currentFolder: StandardPaths.standardLocations(StandardPaths.DownloadLocation)[0]
onAccepted: {
var callable = {}
callable.onStart = function(){
btn_download.disabled = true
}
callable.onFinish = function(){
btn_download.disabled = false
btn_download.text = "下载文件"
layout_file_size.visible = false
text_file_size.text = ""
}
callable.onSuccess = function(result){
showSuccess(result)
}
callable.onError = function(status,errorString){
showError(errorString)
}
callable.onDownloadProgress = function(recv,total){
var locale = Qt.locale()
var precent = (recv/total * 100).toFixed(0) + "%"
btn_download.text = "下载中..."+precent
text_file_size.text = "%1/%2".arg(locale.formattedDataSize(recv)).arg(locale.formattedDataSize(total))
layout_file_size.visible = true
}
var path = FluTools.toLocalPath(currentFolder)+ "/big_buck_bunny.mp4"
http.download("http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4",callable,path)
}
}
FluArea{
anchors{
top: layout_flick.top
bottom: layout_flick.bottom
left: layout_flick.right
right: parent.right
leftMargin: 8
}
Flickable{
clip: true
id:scrollview
width: parent.width
height: parent.height
contentWidth: width
contentHeight: text_info.height
ScrollBar.vertical: FluScrollBar {}
FluText{
id:text_info
width: scrollview.width
wrapMode: Text.WrapAnywhere
padding: 14
}
}
}
FluRectangle{
id:layout_file_size
radius: [4,4,4,4]
height: 36
width: 160
visible: false
x:layout_flick.width
y: 173 - layout_flick.contentY
FluText{
id:text_file_size
anchors.centerIn: parent
}
}
}

View File

@ -0,0 +1,48 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Window
import QtQuick.Controls
import FluentUI
import "qrc:///example/qml/component"
FluScrollablePage{
title:"Image"
FluArea{
Layout.fillWidth: true
height: 260
paddings: 10
Layout.topMargin: 20
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("图片加载失败,请重新加载")
}
}
clickErrorListener: function(){
source = "https://gitee.com/zhu-zichu/zhu-zichu/raw/74f075efe2f8d3c3bb7ba3c2259e403450e4050b/image/banner_1.jpg"
}
}
}
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -1
code:'FluImage{
width: 400
height: 300
source: "https://gitee.com/zhu-zichu/zhu-zichu/raw/74f075efe2f8d3c3bb7ba3c2259e403450e4050b/image/banner_1.jpg"
}'
}
}

View File

@ -1,22 +1,18 @@
import QtQuick import QtQuick
import QtQuick.Layouts import QtQuick.Layouts
import QtQuick.Window import QtQuick.Window
import QtQuick.Controls import QtQuick.Controls
import FluentUI import FluentUI
import "./component" import "qrc:///example/qml/component"
FluScrollablePage{ FluScrollablePage{
title:"InfoBar" title:"InfoBar"
leftPadding:10
rightPadding:10
bottomPadding:20
spacing: 0
FluArea{ FluArea{
Layout.fillWidth: true Layout.fillWidth: true
Layout.topMargin: 20 Layout.topMargin: 20
height: 200 height: 240
paddings: 10 paddings: 10
ColumnLayout{ ColumnLayout{
spacing: 14 spacing: 14
@ -48,10 +44,17 @@ FluScrollablePage{
showSuccess("这是一个Success样式的InfoBar这是一个Success样式的InfoBar") showSuccess("这是一个Success样式的InfoBar这是一个Success样式的InfoBar")
} }
} }
FluButton{
text:"Loading"
onClicked: {
showLoading()
}
}
} }
} }
CodeExpander{ CodeExpander{
Layout.fillWidth: true Layout.fillWidth: true
Layout.topMargin: -1
code:'showInfo("这是一个Info样式的InfoBar") code:'showInfo("这是一个Info样式的InfoBar")
showWarning("这是一个Warning样式的InfoBar") showWarning("这是一个Warning样式的InfoBar")

167
example/qml/page/T_Menu.qml Normal file
View File

@ -0,0 +1,167 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Window
import QtQuick.Controls
import FluentUI
import "qrc:///example/qml/component"
FluScrollablePage{
title:"Menu"
FluMenu {
id:menu
title: qsTr("File")
Action { text: qsTr("New...")}
Action { text: qsTr("Open...") }
Action { text: qsTr("Save") }
FluMenuSeparator { }
Action {
text: qsTr("Quit")
onTriggered: {
showError("Quit")
}
}
Action {
text: qsTr("Disable")
enabled:false
onTriggered: {
showError("Disable")
}
}
FluMenuSeparator { }
Action { text: qsTr("Check");checkable: true;checked: true}
FluMenu{
title: "Save As..."
Action { text: qsTr("Doc") }
Action { text: qsTr("PDF") }
}
}
FluArea{
Layout.fillWidth: true
height: 100
paddings: 10
Layout.topMargin: 20
Column{
id:layout_column
spacing: 15
anchors{
verticalCenter: parent.verticalCenter
left:parent.left
}
FluText{
text:"Menu"
}
FluButton{
text:"Show Menu Popup"
Layout.topMargin: 20
onClicked:{
menu.popup()
}
}
}
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -1
code:'FluMenu{
id:menu
FluMenuItem:{
text:"删除"
onClicked: {
showError("删除")
}
}
FluMenuItem:{
text:"修改"
onClicked: {
showInfo("修改")
}
}
}
menu.popup()
'
}
FluArea{
Layout.fillWidth: true
height: 100
paddings: 10
Layout.topMargin: 20
Column{
spacing: 15
anchors{
verticalCenter: parent.verticalCenter
left:parent.left
}
FluText{
text:"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: "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: -1
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

@ -0,0 +1,186 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Window
import QtQuick.Controls
import FluentUI
import "qrc:///example/qml/component"
FluScrollablePage{
property string password: ""
property var loginPageRegister: registerForWindowResult("/login")
title:"MultiWindow"
Connections{
target: loginPageRegister
function onResult(data)
{
password = data.password
}
}
FluArea{
Layout.fillWidth: true
height: 86
paddings: 10
Layout.topMargin: 20
Column{
spacing: 15
anchors{
verticalCenter: parent.verticalCenter
left: parent.left
}
FluText{
text:"<font color='red'>Standard</font>模式窗口,每次都会创建新窗口"
}
FluButton{
text:"点击创建窗口"
onClicked: {
FluApp.navigate("/standardWindow")
}
}
}
}
FluArea{
Layout.fillWidth: true
height: 86
paddings: 10
Layout.topMargin: 10
Column{
spacing: 15
anchors{
verticalCenter: parent.verticalCenter
left: parent.left
}
FluText{
text:"<font color='red'>SingleTask</font>模式窗口,如果窗口存在,这激活该窗口"
textFormat: Text.RichText
}
FluButton{
text:"点击创建窗口"
onClicked: {
FluApp.navigate("/singleTaskWindow")
}
}
}
}
FluArea{
Layout.fillWidth: true
height: 86
paddings: 10
Layout.topMargin: 10
Column{
spacing: 15
anchors{
verticalCenter: parent.verticalCenter
left: parent.left
}
FluText{
text:"<font color='red'>SingleInstance</font>模式窗口,如果窗口存在,则销毁窗口,然后新建窗口"
}
FluButton{
text:"点击创建窗口"
onClicked: {
FluApp.navigate("/singleInstanceWindow")
}
}
}
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -1
code:'FluWindow{
//launchMode: FluWindowType.Standard
//launchMode: FluWindowType.SingleTask
launchMode: FluWindowType.SingleInstance
}
'
}
FluArea{
Layout.fillWidth: true
height: 100
paddings: 10
Layout.topMargin: 20
Column{
spacing: 15
anchors{
verticalCenter: parent.verticalCenter
left: parent.left
}
FluText{
text:"页面跳转,不携带任何参数"
}
FluButton{
text:"点击跳转"
onClicked: {
FluApp.navigate("/about")
}
}
}
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -1
code:'FluButton{
text:"点击跳转"
onClicked: {
FluApp.navigate("/about")
}
}
'
}
FluArea{
Layout.fillWidth: true
height: 130
paddings: 10
Layout.topMargin: 20
Column{
spacing: 15
anchors{
verticalCenter: parent.verticalCenter
left: parent.left
}
FluText{
text:"页面跳转并携带参数用户名zhuzichu"
}
FluButton{
text:"点击跳转到登录"
onClicked: {
loginPageRegister.launch({username:"zhuzichu"})
}
}
FluText{
text:"登录窗口返回过来的密码->"+password
}
}
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -1
code:'property var loginPageRegister: registerForWindowResult("/login")
Connections{
target: loginPageRegister
function onResult(data)
{
password = data.password
}
}
FluButton{
text:"点击跳转"
onClicked: {
loginPageRegister.launch({username:"zhuzichu"})
}
}
'
}
}

View File

@ -0,0 +1,49 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Window
import QtQuick.Controls
import "qrc:///example/qml/component"
import FluentUI
FluScrollablePage{
title:"Pagination"
FluArea{
Layout.fillWidth: true
height: 200
paddings: 10
Layout.topMargin: 20
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: -1
code:'FluPagination{
pageCurrent: 1
itemCount: 1000
pageButtonCount: 9
}'
}
}

View File

@ -1,17 +1,13 @@
import QtQuick import QtQuick
import QtQuick.Controls import QtQuick.Controls
import QtQuick.Layouts import QtQuick.Layouts
import QtQuick.Window import QtQuick.Window
import FluentUI import FluentUI
import "./component" import "qrc:///example/qml/component"
FluScrollablePage{ FluScrollablePage{
title:"Pivot" title:"Pivot"
leftPadding:10
rightPadding:10
bottomPadding:20
spacing: 0
FluArea{ FluArea{
Layout.fillWidth: true Layout.fillWidth: true
@ -21,6 +17,7 @@ FluScrollablePage{
FluPivot{ FluPivot{
anchors.fill: parent anchors.fill: parent
currentIndex: 2
FluPivotItem{ FluPivotItem{
title:"All" title:"All"
contentItem:FluText{ contentItem:FluText{
@ -49,6 +46,7 @@ FluScrollablePage{
} }
CodeExpander{ CodeExpander{
Layout.fillWidth: true Layout.fillWidth: true
Layout.topMargin: -1
code:'FluPivot{ code:'FluPivot{
anchors.fill: parent anchors.fill: parent
FluPivotItem:{ FluPivotItem:{
@ -78,5 +76,4 @@ FluScrollablePage{
} }
' '
} }
} }

View File

@ -0,0 +1,103 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Window
import QtQuick.Controls
import FluentUI
import "qrc:///example/qml/component"
FluScrollablePage{
title:"Progress"
FluArea{
Layout.fillWidth: true
Layout.topMargin: 20
height: 130
paddings: 10
ColumnLayout{
spacing: 10
anchors{
verticalCenter: parent.verticalCenter
left: parent.left
}
FluText{
text: "indeterminate = true"
}
FluProgressBar{
}
FluProgressRing{
}
}
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -1
code:'FluProgressBar{
}
FluProgressRing{
}
'
}
FluArea{
Layout.fillWidth: true
Layout.topMargin: 20
height: 286
paddings: 10
ColumnLayout{
spacing: 10
anchors{
verticalCenter: parent.verticalCenter
left: parent.left
}
FluText{
text: "indeterminate = false"
}
FluProgressBar{
indeterminate: false
value:slider.value/100
Layout.topMargin: 10
}
FluProgressBar{
indeterminate: false
value:slider.value/100
progressVisible: true
Layout.topMargin: 10
}
FluProgressRing{
indeterminate: false
value: slider.value/100
Layout.topMargin: 10
}
FluProgressRing{
progressVisible: true
indeterminate: false
value: slider.value/100
}
FluSlider{
id:slider
Component.onCompleted: {
value = 50
}
}
}
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -1
code:'FluProgressBar{
indeterminate: false
}
FluProgressRing{
indeterminate: false
progressVisible: true
}
'
}
}

View File

@ -0,0 +1,101 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Window
import QtQuick.Controls
import FluentUI
import "qrc:///example/qml/component"
FluScrollablePage{
title:"RadioButton"
FluArea{
Layout.fillWidth: true
height: 68
paddings: 10
Layout.topMargin: 20
Row{
spacing: 30
anchors.verticalCenter: parent.verticalCenter
FluRadioButton{
disabled: radio_button_switch.checked
}
FluRadioButton{
disabled: radio_button_switch.checked
text:"Right"
}
FluRadioButton{
disabled: radio_button_switch.checked
text:"Left"
textRight: false
}
}
FluToggleSwitch{
id:radio_button_switch
anchors{
right: parent.right
verticalCenter: parent.verticalCenter
}
text:"Disabled"
}
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -1
code:'FluRadioButton{
text:"Text"
}'
}
FluArea{
Layout.fillWidth: true
height: 100
paddings: 10
Layout.topMargin: 20
FluRadioButtons{
spacing: 8
anchors.verticalCenter: parent.verticalCenter
anchors{
verticalCenter: parent.verticalCenter
left: parent.left
}
FluRadioButton{
disabled: radio_button_switch2.checked
text:"Radio Button_1"
}
FluRadioButton{
disabled: radio_button_switch2.checked
text:"Radio Button_2"
}
FluRadioButton{
disabled: radio_button_switch2.checked
text:"Radio Button_3"
}
}
FluToggleSwitch{
id:radio_button_switch2
anchors{
right: parent.right
verticalCenter: parent.verticalCenter
}
text:"Disabled"
}
}
CodeExpander{
Layout.fillWidth: true
Layout.topMargin: -1
code:'FluRadioButtons{
spacing: 8
FluRadioButton{
text:"Radio Button_1"
}
FluRadioButton{
text:"Radio Button_2"
}
FluRadioButton{
text:"Radio Button_3"
}
}'
}
}

View File

@ -0,0 +1,35 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Window
import QtQuick.Controls
import FluentUI
import "qrc:///example/qml/component"
FluScrollablePage {
title: "RatingControl"
FluArea {
Layout.fillWidth: true
height: 100
paddings: 10
Layout.topMargin: 20
Column {
spacing: 10
anchors.verticalCenter: parent.verticalCenter
FluRatingControl {}
FluRatingControl {
number: 10
}
}
}
CodeExpander {
Layout.fillWidth: true
Layout.topMargin: -1
code: 'FluRatingControl{
}'
}
}

View File

@ -1,22 +1,18 @@
import QtQuick import QtQuick
import QtQuick.Layouts import QtQuick.Layouts
import QtQuick.Controls import QtQuick.Controls
import QtQuick.Window import QtQuick.Window
import FluentUI import FluentUI
import "./component" import "qrc:///example/qml/component"
FluScrollablePage{ FluScrollablePage{
title:"Rectangle" title:"Rectangle"
leftPadding:10
rightPadding:10
bottomPadding:20
spacing: 0
FluArea{ FluArea{
Layout.fillWidth: true Layout.fillWidth: true
Layout.topMargin: 20 Layout.topMargin: 20
height: 480 height: 460
paddings: 10 paddings: 10
Column{ Column{
@ -67,7 +63,7 @@ FluScrollablePage{
} }
FluText{ FluText{
text:"配合图片使用" text:"配合图片使用"
fontStyle: FluText.SubTitle font: FluTextStyle.Subtitle
Layout.topMargin: 20 Layout.topMargin: 20
} }
RowLayout{ RowLayout{
@ -79,7 +75,7 @@ FluScrollablePage{
Image { Image {
asynchronous: true asynchronous: true
anchors.fill: parent anchors.fill: parent
source: "qrc:/res/svg/avatar_1.svg" source: "qrc:/example/res/svg/avatar_1.svg"
sourceSize: Qt.size(width,height) sourceSize: Qt.size(width,height)
} }
} }
@ -91,7 +87,7 @@ FluScrollablePage{
asynchronous: true asynchronous: true
anchors.fill: parent anchors.fill: parent
sourceSize: Qt.size(width,height) sourceSize: Qt.size(width,height)
source: "qrc:/res/svg/avatar_2.svg" source: "qrc:/example/res/svg/avatar_2.svg"
} }
} }
FluRectangle{ FluRectangle{
@ -102,7 +98,7 @@ FluScrollablePage{
asynchronous: true asynchronous: true
anchors.fill: parent anchors.fill: parent
sourceSize: Qt.size(width,height) sourceSize: Qt.size(width,height)
source: "qrc:/res/svg/avatar_3.svg" source: "qrc:/example/res/svg/avatar_3.svg"
} }
} }
FluRectangle{ FluRectangle{
@ -113,27 +109,27 @@ FluScrollablePage{
asynchronous: true asynchronous: true
anchors.fill: parent anchors.fill: parent
sourceSize: Qt.size(width,height) sourceSize: Qt.size(width,height)
source: "qrc:/res/svg/avatar_4.svg" source: "qrc:/example/res/svg/avatar_4.svg"
} }
} }
} }
FluRectangle{ FluRectangle{
width: 1080/5 width: 1920/5
height: 1439/5 height: 1200/5
radius:[25,25,25,25] radius:[15,15,15,15]
Image { Image {
asynchronous: true asynchronous: true
source: "qrc:/res/image/image_huoyin.webp" source: "qrc:/example/res/image/banner_1.jpg"
anchors.fill: parent anchors.fill: parent
sourceSize: Qt.size(width,height) sourceSize: Qt.size(2*width,2*height)
} }
Layout.topMargin: 10 Layout.topMargin: 20
} }
} }
} }
CodeExpander{ CodeExpander{
Layout.fillWidth: true Layout.fillWidth: true
Layout.topMargin: -1
code:'FluRectangle{ code:'FluRectangle{
radius: [25,25,25,25] radius: [25,25,25,25]
width: 50 width: 50
@ -141,7 +137,7 @@ FluScrollablePage{
Image{ Image{
asynchronous: true asynchronous: true
anchors.fill: parent anchors.fill: parent
source: "qrc:/res/svg/avatar_4.svg" source: "qrc:/example/res/svg/avatar_4.svg"
sourceSize: Qt.size(width,height) sourceSize: Qt.size(width,height)
} }
}' }'

View File

@ -0,0 +1,14 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Window
import QtQuick.Controls
import FluentUI
import "qrc:///example/qml/component"
FluPage{
launchMode: FluPageType.SingleTop
FluRemoteLoader{
anchors.fill: parent
source: "https://zhu-zichu.gitee.io/T_RemoteLoader.qml"
}
}

View File

@ -0,0 +1,108 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Window
import QtQuick.Controls
import FluentUI
import "qrc:///example/qml/global"
import "qrc:///example/qml/component"
FluScrollablePage{
title:"Settings"
FluArea{
Layout.fillWidth: true
Layout.topMargin: 20
height: 128
paddings: 10
ColumnLayout{
spacing: 5
anchors{
top: parent.top
left: parent.left
}
FluText{
text:lang.dark_mode
font: FluTextStyle.BodyStrong
Layout.bottomMargin: 4
}
Repeater{
model: [{title:"System",mode:FluThemeType.System},{title:"Light",mode:FluThemeType.Light},{title:"Dark",mode:FluThemeType.Dark}]
delegate: FluRadioButton{
checked : FluTheme.darkMode === modelData.mode
text:modelData.title
clickListener:function(){
FluTheme.darkMode = modelData.mode
}
}
}
}
}
FluArea{
Layout.fillWidth: true
Layout.topMargin: 20
height: 160
paddings: 10
ColumnLayout{
spacing: 5
anchors{
top: parent.top
left: parent.left
}
FluText{
text:lang.navigation_view_display_mode
font: FluTextStyle.BodyStrong
Layout.bottomMargin: 4
}
Repeater{
model: [{title:"Open",mode:FluNavigationViewType.Open},{title:"Compact",mode:FluNavigationViewType.Compact},{title:"Minimal",mode:FluNavigationViewType.Minimal},{title:"Auto",mode:FluNavigationViewType.Auto}]
delegate: FluRadioButton{
checked : MainEvent.displayMode===modelData.mode
text:modelData.title
clickListener:function(){
MainEvent.displayMode = modelData.mode
}
}
}
}
}
FluArea{
Layout.fillWidth: true
Layout.topMargin: 20
height: 80
paddings: 10
ColumnLayout{
spacing: 10
anchors{
top: parent.top
left: parent.left
}
FluText{
text:lang.locale
font: FluTextStyle.BodyStrong
Layout.bottomMargin: 4
}
Flow{
spacing: 5
Repeater{
model: ["Zh","En"]
delegate: FluRadioButton{
checked: appInfo.lang.objectName === modelData
text:modelData
clickListener:function(){
appInfo.changeLang(modelData)
}
}
}
}
}
}
}

View File

@ -1,17 +1,13 @@
import QtQuick import QtQuick
import QtQuick.Layouts import QtQuick.Layouts
import QtQuick.Window import QtQuick.Window
import QtQuick.Controls import QtQuick.Controls
import "./component" import "qrc:///example/qml/component"
import FluentUI import FluentUI
FluScrollablePage{ FluScrollablePage{
title:"Slider" title:"Slider"
leftPadding:10
rightPadding:10
bottomPadding:20
spacing: 0
FluArea{ FluArea{
Layout.fillWidth: true Layout.fillWidth: true
@ -19,35 +15,33 @@ FluScrollablePage{
paddings: 10 paddings: 10
Layout.topMargin: 20 Layout.topMargin: 20
FluSlider{ FluSlider{
value: 50
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
} }
} }
CodeExpander{ CodeExpander{
Layout.fillWidth: true Layout.fillWidth: true
Layout.topMargin: -1
code:'FluSlider{ code:'FluSlider{
value:50 value:50
}' }'
} }
FluArea{ FluArea{
Layout.fillWidth: true Layout.fillWidth: true
height: 200 height: 200
paddings: 10 paddings: 10
Layout.topMargin: 20 Layout.topMargin: 20
FluSlider{ FluSlider{
value: 50 orientation: Qt.Vertical
vertical:true
anchors.left: parent.left anchors.left: parent.left
anchors.leftMargin: 20
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
} }
} }
CodeExpander{ CodeExpander{
Layout.fillWidth: true Layout.fillWidth: true
Layout.topMargin: -1
code:'FluSlider{ code:'FluSlider{
vertical:true orientation: Qt.Vertical
value:50 value:50
}' }'
} }

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