《QT從基礎到進階·三十七》QWidget實現左側導航欄效果

NavigationBarPlugin插件類實現了對左側導航欄的管理,我們可以在導航欄插件中添加界面,并用鼠標點擊導航欄能夠切換對應的界面。

源碼在文章末尾

實現效果如下:
在這里插入圖片描述

NavigationBarPlugin實現的接口如下:

class NAVIGATIONBAR_EXPORT NavigationBarPlugin
{
public:virtual ~NavigationBarPlugin() {}//設置父窗口和在父窗口上面的布局virtual void SetParent(QWidget* parent, QLayout* layout) = 0; //Incoming parent interface and layout in parent interface//為導航欄添加標題和圖標virtual void addMainMenu(QString title, QIcon icon) = 0;//在對應的導航欄位置添加界面virtual void addMenuWidget(QString widgetTitle, int mainMenuIndex, QWidget* widget) = 0;//獲取導航欄插件界面virtual QWidget* GetWidget() = 0; //Return to the left navigation bar widget//刷新導航欄顯示virtual void hideAndRefresh() = 0; //Refresh navigation bar display
};

使用方法:
1、創建導航欄對象
NavigationBarPlugin.dll可以通過QPlugin插件的形式加載進來成一個QObject指針,再把QObject強轉為NavigationBarPlugin對象,如下:

NavigationBarPlugin* LeftNavigationBarPlugin = qobject_cast<NavigationBarPlugin*>(plugin);

插件的使用可以看之前的文章:《QT從基礎到進階·三十三》QT插件開發QtPlugin
也可以直接new一個NavigationBarPlugin對象。

2、在主界面設置導航欄和布局

 ui.centralWidget->layout()->addWidget(LeftNavigationBarPlugin->GetWidget());ui.centralWidget->layout()->addItem(m_centerQVBoxLayout);

我們先把導航欄框架添加添加到主界面的左邊,然后在主界面右邊設置一個布局用于后面顯示界面
在這里插入圖片描述

在這里插入圖片描述

3、在導航欄添加標簽按鈕并設置按鈕標簽對應的顯示界面

 LeftNavigationBarPlugin->SetParent(ui.centralWidget, m_centerQVBoxLayout);LeftNavigationBarPlugin->addMainMenu("MTFMeasure", QIcon(":/Gen2WGMTFTester/images/MTF/MTF.png"));
if (mtfMeasurePlugin)LeftNavigationBarPlugin->addMenuWidget("MTF", 0, mtfMeasurePlugin->GetWidget());LeftNavigationBarPlugin->addMainMenu("FindFiducial", QIcon(":/Gen2WGMTFTester/images/fiducial/findFiducial.png"));
LeftNavigationBarPlugin->addMenuWidget("FindFiducial", 1, new QLabel("aaaaaaaaaaa"));
LeftNavigationBarPlugin->addMainMenu("EyeBoxScan", QIcon(":/Gen2WGMTFTester/images/fiducial/eyeBoxScan.jpg"));
LeftNavigationBarPlugin->addMenuWidget("EyeBoxScan", 2, new QLabel("bbbbbbbbbb"));

(1)我們先通過SetParent設置導航欄的的父窗口為centralWidget并把垂直布局設置到導航欄中。
(2)通過addMainMenu設置導航欄第一個標簽為“MTFMeasure”,并設置標簽的圖標。
(3)通過addMenuWidget設置第一個界面為"MTF",第二個參數0表示把該界面放在第一個標簽上顯示,第三個參數拿到mtf的界面傳入放置到導航欄的m_centerQVBoxLayout布局中。
(4)同理下面依次添加第二個標簽和放置第二個界面,添加第三個標簽放置第三個界面

在這里插入圖片描述
源碼下載

在這里插入圖片描述

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

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

相關文章

【brpc學習實踐六】backup request場景案例

應用場景 有時為了保證可用性,需要同時訪問兩路服務,哪個先返回就取哪個。在brpc中,這有多種做法,根據server是否掛在同一個命名服務內有所區別。 當后端server可以掛在一個命名服務內時 Channel開啟backup request。這個Channel會先向其中一個server發送請求,如果在Ch…

C#,數值計算——插值和外推,多項式插值與外推插值(Poly_interp)的計算方法與源程序

1 文本格式 using System; namespace Legalsoft.Truffer { /// <summary> /// 多項式插值與外推插值 /// Polynomial Interpolation and /// Extrapolation interpolation routines for one dimension /// </summary> public class Poly…

【ES6.0】- Promise對象

【ES6.0】- Promise對象 文章目錄 【ES6.0】- Promise對象一、概述二、Promise狀態三、Promise方法3.1 Promise.prototype.then方法&#xff1a;鏈式操作3.2 Promise.prototype.catch方法&#xff1a;捕捉錯誤3.3 Promise.race方法&#xff1a;捕捉錯誤3.4 Promise.any()3.5 Pr…

第三節-Android10.0 Binder通信原理(三)-ServiceManager篇

1、概述 在Android中&#xff0c;系統提供的服務被包裝成一個個系統級service&#xff0c;這些service往往會在設備啟動之時添加進Android系統&#xff0c;當某個應用想要調用系統某個服務的功能時&#xff0c;往往是向系統發出請求&#xff0c;調用該服務的外部接口。在上一節…

廣告機/商業顯示屏_基于MT878安卓主板方案

安卓主板在廣告機領域扮演著重要的角色。無論是在商場、車站、酒店、電梯、機場還是高鐵站&#xff0c;LED廣告機廣泛應用&#xff0c;并通過不同方式進行播放和管理。 廣告機/商業顯示屏_基于MT878安卓主板方案 基于MT8788安卓主板方案的廣告機采用了聯發科MT8788八核芯片方案…

對比兩個數組中對應位置的兩個元素將每次對比的最大值用于構成新的數組np.maximum()

【小白從小學Python、C、Java】 【計算機等考500強證書考研】 【Python-數據分析】 對比兩個數組中對應位置的兩個元素 將每次對比的最大值用于構成新的數組 np.maximum() 選擇題 以下代碼的輸出結果為&#xff1f; import numpy as np a1 [1,2,33] a2 [11,2,3] print("…

Axios 默認配置 簡化URL 簡化代碼 多臺服務器接口配置

main.js配置 import Axios from axios Axios.defaults.method GET//設置默認的請求類型 Axios.defaults.baseURL https://apis.jxcxin.cn/api//設置接口地址 Axios.defaults.params { token: abc } //每次請求都帶上這個參數 Axios.defaults.timeout 5000 //請求的超時時間…

MATLAB - text的兩種使用方法

text小技巧 1. 常規使用&#xff08;Method 1&#xff09;2. 在顯示畫面的相對位置&#xff08;Method 2&#xff09;3. 舉個例子 1. 常規使用&#xff08;Method 1&#xff09; text(x,y,txt)2. 在顯示畫面的相對位置&#xff08;Method 2&#xff09; text(string,‘ABC’,…

使用websocket獲取thingsboard設備的實時數據

背景 有一個讀者前來咨詢,如何實時獲取設備的遙測數據。 其實tb是有提供websocket接口來獲取設備數據的。而且還支持js跨域調用。下面給大家演示一下。 websocket地址 完整代碼 <!DOCTYPE HTML> <html><h

HTTP協議和WebSocket協議之間的區別

HTTP協議和WebSocket協議之間的主要區別在于它們的設計目的和通信方式。 HTTP協議是一種無狀態的協議&#xff0c;它的主要設計目的是用于從Web服務器傳輸超文本到本地瀏覽器的傳輸協議。HTTP協議使用請求和響應模型&#xff0c;客戶端向服務器發送請求&#xff0c;服務器返回…

【Java并發編程十二】線程池

線程池 用來統一地管理線程&#xff0c;避免線程的重復創建與銷毀。使用線程池可以讓執行完的線程回到線程池&#xff0c;等待下一次調用。 import jdk.jshell.EvalException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import j…

Matplotlib顏色條的配置_Python數據分析與可視化

Matplotlib顏色條配置 基本顏色顏色條選擇配色方案顏色條刻度的限制與擴展功能的設置離散型顏色條 基本顏色 Matplotlib提供了8種指定顏色的方法&#xff1a; 在[0&#xff0c;1]中的浮點值的RGB或RGBA元組&#xff08;例如 (0.1, 0.2, 0.5) 或&#xff08;0.1&#xff0c; 0.…

C語言中文網 - Shell腳本 - 9

第1章 Shell基礎(開胃菜) 9. Shell修改命令提示符 Shell 通過PS1和PS2這兩個環境變量來控制提示符的格式,修改PS1和PS2的值就能修改命令提示符的格式。 PS1 控制最外層的命令提示符格式。 PS2 控制第二層的命令提示符格式。 在修改 PS1 和 PS2 之前,我們先用 echo 命令輸出…

contos7中mongodb數據庫無法備份與還原,數據庫工具的安裝

由于之前數據庫沒有卸載干凈&#xff0c;導致直接用sudo yum install -y mongodb-org-tools命令無法直接安裝&#xff0c;只能選擇手動安裝了。 先去官網找到mongo-tool工具 MongoDB Database Tools Downloads | MongoDB 然后復制要下載的版本的地址。 然后直接用wget來下載 …

【每日OJ —— 622. 設計循環隊列】

每日OJ —— 622. 設計循環隊列 1.題目&#xff1a;622. 設計循環隊列2.解法2.1.解法講解2.1.1.算法講解2.1.2.代碼實現2.1.3.提交通過展示 1.題目&#xff1a;622. 設計循環隊列 2.解法 1.本題有很多解法&#xff1a;可以使用數組&#xff0c;單鏈表&#xff0c;雙鏈表&#x…

2023亞太杯數學建模賽題人工精準翻譯

大家好&#xff0c;亞太杯今天早上6點已經開賽啦&#xff0c;然后我在這里給大家帶來賽題的精準人工翻譯&#xff0c;防止大家直接用軟件翻譯導致某些地方亂碼或者翻譯不精準&#xff0c;這會導致后續做題過程出現很大偏差。 注意&#xff0c;以下翻譯均免費發放word形式的哈&…

【精選】CSS入門必看知識點大合集

CSS簡介 CSS概念 CSS&#xff08;Cascading Style Sheets&#xff09;層疊樣式表&#xff0c;又叫級聯樣式表&#xff0c;簡稱樣式表 CSS文件后綴名為.css CSS用于HTML文檔中元素樣式的定義 為什么需要CSS 使用css的唯一目的就是讓網頁具有美觀一致的頁面 語法 CSS 規則…

DB2—03(DB2中常見基礎操作)

DB2—03&#xff08;DB2中常見基礎操作&#xff09; 1. 前言1.1 oracle和mysql相關 2. db2中的"dual"2.1 SYSIBM.SYSDUMMY12.2 使用VALUES2.3 SYSIBM.SYSDUMMY1 "變" dual 3. db2中常用函數3.1 nvl()、value()、COALESCE()3.2 NULLIF() 函數3.3 LISTAGG() …

論文《Unsupervised Dialog Structure Learning》筆記:詳解DD-VRNN

D-VRNN模型和DD-VRNN模型 總體架構 離散-可變循環變分自編碼器&#xff08;D-VRNN&#xff09;和直接-離散-可變循環變分自編碼器&#xff08;DD-VRNN&#xff09;概述。D-VRNN和DD-VRNN使用不同的先驗分布來建模 z t z_t zt?之間的轉換&#xff0c;如紅色實線所示。 x t x_t…

Rust錯誤處理:Result

文章目錄 簡介錯誤匹配 Rust基礎教程&#xff1a; 初步? 所有權? 結構體和枚舉類? 函數進階? 泛型和特征? 并發和線程通信? cargo包管理? 可空類型Option Rust進階教程&#xff1a; 用宏實現參數可變的函數? 類函數宏 簡介 Rust中沒有提供類似try…catch之類…