From 2f2ee6571e9ce784db0488ade60816f09bd7448c Mon Sep 17 00:00:00 2001 From: SineStriker <trueful@163.com> Date: 周三, 27 12月 2023 01:56:47 +0800 Subject: [PATCH] Finish customize system button pos for QtWidgets --- README.md | 51 ++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 44 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 7572d09..d84cc1c 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,20 @@ Support as many system native features as possible without requiring additional dependencies. +<!-- ## Why using QWindowKit? + +Here are why `QWindowKit` is better than `FramelessHelper`: + ++ Full support of Windows 11 Snap Layout ++ Most of the redundant codes and architectural flaws are eliminated, and the binary size compiled by MSVC is about 1/9 of `FramelessHelper` ++ A critical issue that moving window forces the entire window to be repainted on Windows is fixed ++ Capable to cope with WinId mutation, and `QWebEngineView` is perfectly supported ++ Better workaround to handle Windows 10 top border issue ++ Simpler APIs, more detailed documentation and comments ++ A lot of bugs are fixed + +Feature requests are welcome. --> + ## Supported Platforms + Microsoft Windows @@ -101,6 +115,8 @@ ### Qt Widgets Application +#### Setup Window Agent + First, setup `WidgetWindowAgent` for your top `QWidget` instance. (Each window needs its own agent.) ```c++ @@ -114,13 +130,15 @@ } ``` -You can also initialize the agent after the window constructs. +If you don't want to derive a new widget class or change the constructor, you can initialize the agent after the window constructs. ```c++ auto w = new MyWidget(); auto agent = new QWK::WidgetWindowAgent(w); agent->setup(w); ``` + +#### Construct Title bar Then, construct your title bar widget, without which the window lacks the basic interaction feature, and it's better to put it into the window's layout. @@ -152,9 +170,20 @@ The rest region within the title bar will be regarded as the draggable area for the user to move the window. -Check [`MainWindow`](examples/mainwindow/mainwindow.cpp#L108) example to get detailed information. + +#### Window Attributes (Experimental) + +On Windows 11, you can use this API to enable system effects. + +```c++ +agent->setWindowAttribute("mica", true); +``` + +Available keys: `mica`, `mica-alt`, `acrylic`, `dark-mode`. ### Qt Quick Application + +#### Initialization Make sure you have registered `QWindowKit` into QtQuick: @@ -170,6 +199,8 @@ // ... } ``` + +#### Setup Window Components Then you can use `QWindowKit` data types and classes by importing it's URI: @@ -193,6 +224,10 @@ You can omit the version number or use "auto" instead of "1.0" for the module URI if you are using Qt6. +#### Window Attributes (Experimental) + +TODO + ### Learn More See [examples](examples) for more demo use cases. The examples have no High DPI support. @@ -200,16 +235,18 @@ ## Documentations + Examples (TODO) ++ Notes (TODO) + [FramelessHelper Related](docs/framelesshelper-related.md) ## TODO + Fix 5.15 window abnormal behavior -+ Fix window 10 top border color in dark background -+ Fix `isFixedSize` code -+ Support customized system button area on Mac -+ Implement Mac window context hook -+ Support window attribute switching on Windows + +## Special Thanks + ++ [Arabaku](https://github.com/Arabaku) ++ [Maplespe](https://github.com/Maplespe) ++ [zhiyiYo](https://github.com/zhiyiYo) ## License -- Gitblit v1.9.1