目錄
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"