Yuhang Zhao
2023-12-19 78f31c67d71ee743f022dd6f5930abae6f6d54f9
README.md
@@ -4,23 +4,38 @@
This project inherited most of [wangwenx190 FramelessHelper](https://github.com/wangwenx190/framelesshelper) implementation, with a complete refactoring and upgrading of the architecture.
## Screenshots
### Windows
![image](./docs/images/win32.png)
### Linux
![image](./docs/images/linux.png)
### macOS
![image](./docs/images/mac.png)
## 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
+ Make Linux system move/resize more robust
+ Implement Mac window context hook
+ Support window attribute switching on Windows
## Supported Platforms
+ Microsoft Windows (Vista ~ 11)
+ Apple Mac OSX (11+)
+ GNU/Linux (Tested on Ubuntu)
+ Microsoft Windows
+ Apple macOS (11+)
+ GNU/Linux
## Requirements
| Component | Requirement |               Detailed               |
| Component | Requirement |               Details                |
|:---------:|:-----------:|:------------------------------------:|
|    Qt     |   \>=5.15   |      Core, Gui, Widgets, Quick       |
| Compiler  |  \>=C++17   |        MSVC 2019, GCC, Clang         |
@@ -30,8 +45,8 @@
+ Windows
  + MSVC: 2019, 2022
  + MinGW: 13.2.0
+ MacOSX
  + MinGW (GCC): 13.2.0
+ macOS
  + Clang 14.0.3
+ Ubuntu
  + GCC: 9.4.0
@@ -95,7 +110,7 @@
MyWidget::MyWidget(QWidget *parent) {
    // ...
    auto agent = new WidgetWindowAgent(w);
    auto agent = new QWK::WidgetWindowAgent(w);
    agent->setup(w);
    // ...
}
@@ -104,9 +119,11 @@
You can also initialize the agent after the window constructs.
```c++
auto w = new MyWidget();
auto agent = new WidgetWindowAgent(w);
auto agent = new QWK::WidgetWindowAgent(w);
agent->setup(w);
```
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.
@@ -132,7 +149,44 @@
### Qt Quick Application
TODO
Make sure you have registered QWK into QtQuick:
```cpp
// ...
#include <QWKQuick/qwkquickglobal.h>
// ...
int main(int argc, char *argv[])
{
    // ...
    QQmlApplicationEngine engine;
    // ...
    QWK::registerTypes(&engine);
    // ...
}
```
Then you can use QWK data types and classes by importing it's URI:
```qml
import QtQuick 2.15
import QtQuick.Window 2.15
import QWindowKit 1.0
Window {
    id: window
    visible: false // We hide it first, so we can move the window to our desired position silently.
    Component.onCompleted: {
        windowAgent.setup(window)
        window.visible = true
    }
    WindowAgent {
      // ...
    }
}
```
You can omit the version number or use "auto" instead of "1.0" for the module URI if you are using Qt6.
### Learn More