带标题栏的Qt跨平台无边框窗口。
使用QWindowKit库,参考了其Example的代码,对其进行了部分修改,使用的版本为Fork的版本。
使用的是编译后的.pri文件,对QWindowKit库进行编译的操作参考其README文件。
- 支持窗口上、下、左、右、左上、左下、右上、右下八个方向的拖拽拉伸。
- 标题栏包括左上角图标、文字、最小化、最大化、关闭按钮,支持双击放大、拖拽、最大化推拽。
- 基类为QMainWindow,支持其自带的函数。
- 使用QSS控制窗口样式,清晰方便。
Win11效果图 Win10效果图 Ubuntu22.04效果图
Windows:
- Qt Creator 12.0.1 (Community)
- Qt 6.6.1
- MinGW 11.2.0 64-bit
- CMake 3.27.7
- Ninja 1.10.2
- Add qwindowkit/bin to PATH
Linux:
- Qt Creator 12.0.1 (Community)
- Qt 6.6.1
- GCC 11.4.0 64-bit
- CMake 3.27.7
- Ninja 1.10.2
-
创建一个类,直接继承该类。
class Example : public QFramelessWindow
-
设置标题栏图标。
1)不设置:标题栏不会存在图标。
2)设置,但不输入参数:标题栏存在默认图标。
this->setIconButton();
3)设置,输入图标路径:标题栏存在该路径图标。
this->setIconButton(":/Resources/TitleBar/appIcon.png");
-
设置标题栏文字。
1)不设置:标题栏不存在文字。
2)设置:标题栏存在文字。
this->setTitleText("This is title text!");
-
设置主题。
目前只有两种,Dark以及Light,通过加载不同的QSS文件实现。
1)不设置:默认黑色主题。
2)设置:根据参数变更主题。
this->setTheme(QFramelessWindow::Dark);
-
设置自定义的标题栏。
若不想使用默认标题栏,可以自定义标题栏进行使用,使用QMainWindow自带的函数即可。
QWidget *title_bar_; setMenuWidget(title_bar_);
-
设置窗口内容。
使用QMainWindow自带的函数即可。
Qwidget *central_widget; setCentralWidget(central_widget);