SARibbon的編譯構建及詳細用法

目錄

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"

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/96289.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/96289.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/96289.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CSS【詳解】性能優化

精簡 CSS移除未使用的 CSS&#xff08;“死代碼”&#xff09;&#xff0c;可借助工具如 PurgeCSS、UnCSS 自動檢測并刪除未被頁面使用的樣式。避免重復樣式&#xff0c;通過提取公共樣式&#xff08;如 mixin 或公共類&#xff09;減少代碼冗余。利用預處理器&#xff08;Sass…

Flutter 線程模型詳解:主線程、異步與 Isolate

一、主線程&#xff1a;默認的執行環境 所有代碼默認運行在主線程。下面的例子展示了一個會阻塞主線程的錯誤示范&#xff1a; import package:flutter/material.dart;void main() {runApp(const MyApp()); }class MyApp extends StatelessWidget {const MyApp({super.key});ov…

ChartDB:可視化數據庫設計工具私有化部署

ChartDB:可視化數據庫設計工具私有化部署一、什么是ChartDB ChartDB 是一款基于 Web 的開源數據庫可視化工具&#xff0c;專為簡化數據庫設計與管理流程而開發。以下是其核心特性與功能概述: 1、核心功能 智能查詢可視化?&#xff1a;通過單條 SQL 查詢即可生成數據庫架構圖&a…

單片機-FreeRTOS(ing)

目錄 一、基礎介紹 1.1 調度策略 1.1.1 調度方式 1.1.2 調度器 1.2 任務以及優先級 1.2.1 任務與協程 1.2.2 任務狀態 1.2.3 任務優先級 1.2.4 任務優先級分配方案 1.3 任務間通信 - 信號量 1.3.1 信號量 1.3.2 任務間計數信號量的實現 1.3.3 中斷方式計數信號量的…

為什么調用API總返回404,該如何調試

當調用一個應用程序接口&#xff08;API&#xff09;時&#xff0c;持續地收到“404 未找到”的錯誤&#xff0c;其核心原因在于客戶端發起的“請求”&#xff0c;未能成功地&#xff0c;匹配到服務器上任何一個“真實存在”的、可供訪問的“資源路徑”。這本質上&#xff0c;是…

醫療信息化自主可控轉型的實踐探索 —— 以常德二院為例

目錄 頭雁領航 - 激發醫療新質生產力 核心支撐 - 電科金倉奠定數據底座 生態共建 - 攜手護航醫療信創發展 信創產業發展是國家經濟數字化轉型、提升產業鏈發展的關鍵&#xff0c;是科技自立自強的核心基座&#xff0c;其本質是實現中國信息化產業的自主可控。醫療信創作為關…

Gin傳參和接收參數的方式

Gin查詢參數和接收參數的方式 常用 Gin 綁定方法對比方法用途特點c.Bind()自動識別 Content-Type最通用&#xff0c;根據請求頭自動選擇綁定方式c.ShouldBindJSON()只綁定 JSON強制使用 JSON 格式&#xff0c;類型明確c.ShouldBindXML()只綁定 XML強制使用 XML 格式c.ShouldBin…

MariaDB/MySQL 客戶端工具與服務端配置精要指南

文章目錄一、客戶端與服務端程序二、用戶賬號管理三、MySQL 客戶端命令3.1 命令類型?3.2 使用模式?3.3 常用選項?3.4 提示符定制?四、mysqladmin管理命令??五、服務端配置?5.1 配置文件???5.2 Socket 通信配置??六、最佳實踐總結免費個人運維知識庫&#xff0c;歡迎…

自動化項目日報生成工具測評與選型:如何匹配團隊日報管理需求

引言在項目管理場景中&#xff0c;手動撰寫日報常面臨多重效率瓶頸&#xff1a;任務數據分散在協作群、Excel 表格、項目看板等多個平臺&#xff0c;匯總時需反復核對&#xff1b;不同成員日報格式不統一&#xff0c;管理層整合分析耗時&#xff1b;任務進度與日報信息不同步&a…

基于SpringBoot+Vue的吳韻蘇香文旅小程序(協同過濾算法、Echarts圖形化分析、騰訊地圖API、二維碼識別)

&#x1f388;系統亮點&#xff1a;協同過濾算法、Echarts圖形化分析、騰訊地圖API、二維碼識別&#xff1b;一.系統開發工具與環境搭建1.系統設計開發工具后端使用Java編程語言的Spring boot框架 項目架構&#xff1a;B/S架構 運行環境&#xff1a;win10/win11、jdk17小程序&a…

python numpy.random的基礎教程(附opencv 圖片轉數組、數組轉圖片)

目錄 1.在區間[a,b)隨機生成n個整數。 2.在區間[a,b)隨機生成n個數。 3.在區間[0,1)生成隨機數 4.打亂順序 5.從指定的列表中選擇 NumPy&#xff08;Numerical Python&#xff09;是一個開源的科學計算庫&#xff0c;專門用于高效處理多維數組&#xff08;ndarray&#xf…

Vue2.x核心技術與實戰(二)

目錄 三、Vue2.x:生命周期+工程化開發(組件入門) 3.1 生命周期 3.1.1 生命周期 & 生命周期四個階段 3.1.2 生命周期鉤子 Vue生命周期鉤子案例 - 新聞列表 & 輸入框自動聚焦 3.2 綜合案例:小黑記賬清單 3.3 工程化開發入門 3.3.1 工程化開發 & 腳手架Vue …

【鴻蒙心跡】7×24小時極限求生:當Origin_null遇上鴻蒙,我如何用100杯咖啡換一條跨域活路?

文章概要 大家好&#xff0c;我是那個把黑眼圈熬成華為工牌掛繩的倒霉蛋。過去100個夜晚&#xff0c;我在HarmonyOS NEXT的ArkWeb里被Origin:null反復按在地上摩擦——小程序白屏、OPTIONS 400、官方文檔沉默三連擊。最終&#xff0c;我用C、libcurl、OpenSSL和一堆速溶咖啡&am…

【git】刪除一條本地提交的歷史commit

在工程中&#xff0c;如果想要刪除一條本地提交的歷史commit&#xff0c;可以通過droprebase -i HEAD^n的方式。1.情景提交了三條commit&#xff0c;想刪掉第二條commit。git logcommit_id_*******1 commit_id_*******2 commit_id_*******32.解決git rebase -i HEAD~2輸出&…

軟件測試中,JMeter 的作用以及優缺點是什么?

回答重點JMeter 是一款開源的軟件測試工具&#xff0c;主要用來對各種軟件或服務進行性能測試和負載測試。它可以模擬大量用戶同時對服務器、網絡或其他資源發起請求&#xff0c;從而測試它們的響應時間、吞吐量等性能指標。優點&#xff1a;1&#xff09; 開源且免費 &#xf…

STM32存儲結構

我們在使用Keil編譯程序成功后會,有一行各部分占用內存的提示信息,如下Program Size:Code7492 RO-data556 Rw-data72 ZI-data11688,這是stm32代碼編譯后的提示我們分析一下這個編譯輸出&#xff1a;- Code: 7492字節 -> 代碼部分&#xff08;存放在Flash&#xff09;- RO-da…

手機 瀏覽器調用攝像頭掃描二維碼Quagga

注&#xff1a;需用谷歌瀏覽器才能調用權限1. 引入依賴&#xff1a;npm install ericblade/quagga2<template><el-button color"#188ae2" click"handleScan" class"scan-btn" :disabled"isInitializing || isScanning">{{…

【Oracle篇】偽列之Version Query:全鏈路追蹤行數據變更的所有記錄(不僅僅是被修改的最后時間)(第二篇,總共六篇)

&#x1f4ab;《博主主頁》&#xff1a;    &#x1f50e; CSDN主頁__奈斯DB    &#x1f50e; IF Club社區主頁__奈斯、 &#x1f525;《擅長領域》&#xff1a;擅長阿里云AnalyticDB for MySQL(分布式數據倉庫)、Oracle、MySQL、Linux、prometheus監控&#xff1b;并對…

代理模式深度解析:從靜態代理到 Spring AOP 實現

代理模式是軟件開發中一種經典的設計模式&#xff0c;它通過引入 "代理對象" 間接訪問目標對象&#xff0c;從而在不修改目標對象代碼的前提下&#xff0c;實現功能增強&#xff08;如日志記錄、事務管理&#xff09;、權限控制等橫切需求。從簡單的靜態代理到靈活的…

算法 ----- 鏈式

目錄 一 、鏈式 二 、題目 1、兩兩相加 &#xff08;1&#xff09;題目 (3) 代碼書寫 2、兩兩交換鏈表中的節點 &#xff08;1&#xff09;題目 &#xff08;2&#xff09; 解題思路 &#xff08;3&#xff09;代碼書寫 3、重排鏈表 &#xff08;1&#xff09;題目 …