目录
1.1 源码构建
1.2 搭建项目
1.3 详细用法
1.4 不同风格
1.5 完整代码
引言:SARibbon是一个专门为Qt框架设计的开源Ribbon风格界面控件库,它模仿了微软Office和WPS的Ribbon UI风格,适用于需要复杂菜单和工具栏的大型桌面程序。本文从源码编译构建到详细使用,做了一个总结,可以帮助开发者从零开始,快速搭建Ribbon界面风格的Qt项目。
1.1 源码构建
第一步:下载源码:
git clone https://github.com/czyt1988/SARibbon.git
第二步:构建QWindowkit库
QWindowkit是一个第三方库,专门做无边框方案——也就是说不用windows默认的边框,而是自定义的边框。SARibbon采用了QWindowkit,它可以实现自定义的边框,也能跟windows提供的窗口一样,例如贴边或者Snap Layout效果——后面看效果对比。SARibbon默认是开启QWindowkit的,当然也可以关闭,就是简单的无边框方案,没有QWindowkit炫酷的效果。至于如何开启、关闭,下文会介绍。我们先构建下这个库。这里就不用再单独去下载QWindowkit源码了,SARibbon源码里头包含了这部分,在src/SARibbonBar/3rdparty下。
(1)打开Visual Studio,点击“继续但不需要代码”。
(2)依次选择菜单栏-文件-打开-CMake,打开src/SARibbonBar/3rdparty下的CMakeLists.txt。
(3)打开解决方案资源管理器(菜单-视图-解决方案资源管理器),可以看到项目目录。右击CMakeLists.txt,点击“配置SARibbon-3rdparty-build”。完成以后,点击“生成”。完成以后,点击“安装”。
安装完成后,在SARibbon主目录下就生成了一个名为bin_qt5.15.2_MSVC_x64(名字可能不是这个,根据你的qt版本)的文件夹。这就算是构建完成了。
这是debug版本,如果还要release版本,选择Qt-Release,同(3),再来一遍。
第三步:构建SARibbon库
(1)打开Visual Studio,点击“继续但不需要代码”。
(2)依次选择菜单栏-文件-打开-CMake,打开SARibbon根目录下的CMakeLists.txt。
(3)设置是否开启QWindowkit。
在CMakeLists.txt中找到这一行:option(SARIBBON_USE_FRAMELESS_LIB "Using the QWindowKit library as a frameless solution" ON),ON就是开启了QWindowkit,默认是开启的。可以改成OFF,就是关闭QWindowkit。
运行它的例子,这是关闭了QWindowkit的效果:
开启了QWindowkit的效果:
(4)设置是否开启snap layout。
snap layout就是windows11的一个效果,如下:当鼠标悬浮在最大化按钮上的时候,会出现这种窗口缩略图布局。
在CMakeLists.txt中找到这一行:option(SARIBBON_ENABLE_SNAPLAYOUT "Whether to enable the Snap Layout effect in Windows 11, this option only takes effect when SARIBBON_USE_FRAMELESS_LIB=ON" OFF)。默认是关闭了snap layout效果,可以设置ON开启这个效果。
(5)跟构建QWindowkit一样,选择debug或者release,配置-生成-安装。就完成了构建,最终也会生成到根目录下bin_qt5.15.2_MSVC_x64文件夹中。
1.2 搭建项目
第一步:用Visual Studio创建一个qt widget项目:
第二步:引入SARibbon库:
(1)在解决方案资源管理器中,右击项目,打开属性对话框,添加包含目录和库目录,分别对应构建生成的bin_qt5.15.2_MSVC_x64文件夹下的include/SARibbonBar和lib。
添加依赖项:SARibbonBard.lib,release下添加SARibbonBar.lib:
(2)把几个dll放到VS能找到的地方,为了方便,就放到项目目录x64/Debug,release下是x64/Debug。
第三步:新建一个类,这里命名为MainWindow,让它继承自SARibbonMainWindow。
MainWindow.h:
#pragma once
#include <SARibbonMainWindow.h>
class MainWindow : public SARibbonMainWindow
{Q_OBJECT
public:MainWindow();
};
MainWindow.cpp:
#include "MainWindow.h"MainWindow::MainWindow()
{resize(1800, 1400);
}
main.cpp
#include <QtWidgets/QApplication>
#include "MainWindow.h"