【QA】外觀模式在Qt中有哪些應用?

1. QWidget及其布局管理系統

外觀模式體現

QWidget 是Qt中所有用戶界面對象的基類,而布局管理系統(如 QVBoxLayoutQHBoxLayoutQGridLayout 等)就像是一個外觀類。客戶端代碼(開發者編寫的界面代碼)通常不需要直接與各個子控件的幾何位置和大小調整細節打交道,而是通過布局管理器這個外觀來設置控件的排列方式。

代碼示例
#include <QApplication>
#include <QWidget>
#include <QVBoxLayout>
#include <QPushButton>int main(int argc, char *argv[])
{QApplication a(argc, argv);// 創建主窗口QWidget window;// 創建布局管理器,它就像外觀類QVBoxLayout *layout = new QVBoxLayout(&window);// 創建子控件QPushButton *button1 = new QPushButton("Button 1", &window);QPushButton *button2 = new QPushButton("Button 2", &window);// 通過布局管理器添加子控件layout->addWidget(button1);layout->addWidget(button2);// 設置窗口的布局window.setLayout(layout);// 顯示窗口window.show();return a.exec();
}
解釋

在上述代碼中,QVBoxLayout 作為外觀類,客戶端代碼只需要將按鈕添加到布局中,而布局管理器會自動處理按鈕的排列和大小調整,客戶端無需關心每個按鈕具體的位置和大小計算等細節。

2. QFileDialog類

外觀模式體現

QFileDialog 是一個用于選擇文件或目錄的對話框類。它封裝了操作系統文件選擇對話框的復雜操作,為客戶端代碼提供了一個簡單統一的接口。客戶端代碼不需要了解操作系統底層文件選擇對話框的實現細節,只需要調用 QFileDialog 提供的靜態方法,如 getOpenFileNamegetSaveFileName 等,就可以實現文件選擇功能。

代碼示例
#include <QApplication>
#include <QFileDialog>
#include <QDebug>int main(int argc, char *argv[])
{QApplication a(argc, argv);// 使用QFileDialog選擇文件QString fileName = QFileDialog::getOpenFileName(nullptr, "Open File", "", "All Files (*.*)");if (!fileName.isEmpty()) {qDebug() << "Selected file:" << fileName;}return a.exec();
}
解釋

在這個例子中,QFileDialog 就是外觀類,客戶端代碼只需要調用 getOpenFileName 方法就可以彈出文件選擇對話框并獲取用戶選擇的文件路徑,而不需要了解操作系統如何實現文件選擇對話框的細節。

3. QMediaPlayer類

外觀模式體現

QMediaPlayer 是Qt中用于播放多媒體文件的類。它封裝了底層多媒體播放的復雜操作,如音頻解碼、視頻渲染等。客戶端代碼只需要創建 QMediaPlayer 對象,設置要播放的媒體源,然后調用 playpausestop 等簡單方法,就可以實現多媒體文件的播放控制,而不需要了解底層多媒體庫的具體實現。

代碼示例
#include <QApplication>
#include <QMediaPlayer>
#include <QMediaContent>
#include <QUrl>int main(int argc, char *argv[])
{QApplication a(argc, argv);// 創建媒體播放器對象QMediaPlayer *player = new QMediaPlayer;// 設置要播放的媒體源player->setMedia(QMediaContent(QUrl::fromLocalFile("/path/to/your/media/file.mp3")));// 播放媒體player->play();return a.exec();
}
解釋

QMediaPlayer 作為外觀類,將底層多媒體播放的復雜操作封裝起來,客戶端代碼只需要簡單地設置媒體源并調用播放方法,就可以實現多媒體文件的播放,無需關心底層的音頻解碼、播放控制等細節。

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

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

相關文章

解鎖云原生后端開發新姿勢:騰訊云大模型API實戰攻略

目錄 云原生后端與大模型融合的開篇之章? 探秘云原生后端開發? 云原生后端是什么? 云原生后端架構核心要素? 微服務架構? 容器化技術? 服務發現與配置管理? Kubernetes 編排? 走進騰訊云大模型知識引擎? 引擎獨特功能與優勢? DeepSeek - R1、V3 兩款模型 …

AWS NoSQL解決方案全景圖

&#xff08;技術架構對比表&#xff09; 服務名稱數據模型協議兼容性核心架構特性適用場景DynamoDB鍵值/文檔原生API分布式SSD、自動分片高并發事務處理DocumentDB文檔型MongoDB 4.0存儲計算分離、6副本日志體系JSON數據聚合分析MemoryDB鍵值流數據Redis 6.2多AZ持久化、微秒…

【拒絕算法PUA】LeetCode 2116. 判斷一個括號字符串是否有效

目錄 系列文章目錄 專題總結&#xff1a; C刷題技巧總結&#xff1a; 題目 2116. 判斷一個括號字符串是否有效 難度 描述 解題方法1 系列文章目錄 專題總結&#xff1a; 【拒絕算法PUA】0x00-位運算【拒絕算法PUA】0x01- 區間比較技巧【拒絕算法PUA】0x02- 區間合并技…

常見中間件漏洞攻略-Tomcat篇

一、 CVE-2017-12615-Tomcat put方法任意文件寫入漏洞 第一步&#xff1a;開啟靶場 第二步&#xff1a;在首頁抓取數據包&#xff0c;并發送到重放器 第三步&#xff1a;先上傳嘗試一個1.txt進行測試 第四步&#xff1a;上傳后門程序 第五步&#xff1a;使用哥斯拉連接 二、后…

《精益創業》第十三章《尾聲:杜絕浪費》總結

核心思想&#xff1a; “杜絕浪費”是精益創業的終極目標與核心理念&#xff0c;其本質是通過系統性識別并消除一切不創造用戶價值的活動&#xff0c;將有限資源聚焦于真正驅動增長的“價值流”。浪費不僅指物質損耗&#xff0c;更包括時間、人力與機會成本的隱性流失。 一、精…

【nodejs】爬蟲路漫漫,關于nodejs的基操

一.下載安裝nodejs 官網地址&#xff1a;Node.js — 在任何地方運行 JavaScript 二.下載安裝vscode代碼編輯器 官網地址&#xff1a;Download Visual Studio Code - Mac, Linux, Windows 三.修改本地腳本策略 1&#xff0c;windowsi 打開電腦設置 2&#xff0c;輸入powersh…

圖論 | 島嶼數量(深搜,廣搜)

島嶼數量 acm模式&#xff1a;99.島嶼數量 核心代碼模式&#xff1a; 200. 島嶼數量 思路 遍歷grid&#xff0c;如果它是1&#xff0c;則通過bfs/dfs將這個小島的grid變為0 dfs def dfs(grid,i,j):if i<0 or j<0 or i>len(grid) or j>len(grid[0]):returnif g…

CSS 文檔流:元素排列的底層邏輯與布局控制

CSS 文檔流:元素排列的底層邏輯與布局控制 一、文檔流的核心概念 文檔流(Normal Flow)作為瀏覽器默認的布局模式,從根本上決定了元素在頁面上的自然排列順序。**它的核心規則遵循從上到下依次堆疊的原則,其中塊級元素會獨占一行,行內元素則水平排列。**這種布局模式與書…

el-table表格toggleRowSelection方法選中無效

開發中會有對表格中進行默認選中的功能&#xff0c;element-plus官方有一個選中示例&#xff0c;如下 const toggleSelection (rows?: User[]) > {if (rows) {rows.forEach((row) > {multipleTableRef.value!.toggleRowSelection(row, undefined)})} else {multipleTa…

Java EE(16)——網絡原理——TCP協議解析二

4.滑動窗口(效率機制) 上篇博客講到的確認應答/超時重傳/連接管理都是安全機制&#xff0c;但也會降低傳輸效率。滑動窗口就是在保證可靠傳輸的基礎上&#xff0c;盡可能地提高傳輸效率。 根據確認應答機制&#xff0c;客戶端每發送一個請求都需要收到服務器的確認應答報文后才…

從入門到精通【MySQL】 CRUD

文章目錄 &#x1f4d5;1. Create 新增??1.1 單行數據全列插入??1.2 單行數據指定列插入??1.3 多行數據指定列插入 &#x1f4d5;2. Retrieve 檢索??2.1 全列查詢??2.2 指定列查詢??2.3 查詢字段為表達式??2.4 為查詢結果指定別名??2.5 結果去重查詢 &#x1f…

C++學習之云盤上傳文件列表下載

1.上傳打開文件操作 1. 注冊 客戶端 成功 {"code":"002"} 該用戶已存在 {"code":"003"} 失敗 {"code":"004"} 服務器 2. 登錄 客戶端 服務器 // url http: //127.0.0.1:80/reg // post 數據格式 …

OpenCV圖像拼接(5)用于計算一組圖像的特征點和描述符的函數computeImageFeatures()

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 cv::detail::computeImageFeatures 是 OpenCV 中用于計算一組圖像的特征點和描述符的函數&#xff0c;通常在圖像拼接或類似的任務中使用。這個函…

詳細解析格式化消息框的代碼

書籍&#xff1a;《windows程序設計(第五版)》的開始 環境&#xff1a;visual studio 2022 內容&#xff1a;格式化消息框 說明&#xff1a;以下內容大部分來自騰訊元寶。 封裝MessageBoxPrintf 在MessageBoxPrintf()中處理可變參數&#xff0c;通過va_list機制&#xff0c…

【SpringSecurity】詳細核心類與過濾器流程講解和封裝通用組件實戰

Spring Security 全面介紹 1. 什么是 Spring Security&#xff1f; Spring Security 是一個功能強大且高度可定制的認證和訪問控制框架&#xff0c;是保護基于 Spring 的應用程序的標準工具。它是一個專注于為 Java 應用程序提供認證和授權的框架&#xff0c;實際上它是 Spri…

淺談Qt事件子系統——以可拖動的通用Widget為例子

淺談Qt事件子系統——以可拖動的通用Widget為例子 這一篇文章是一個通過實現可拖動的通用Widget為引子簡單介紹一下我們的事件對象子系統的事情 代碼和所有的文檔 1&#xff1a;Qt側的API介紹和說明 ? 這個是每一個小項目的慣例&#xff0c;我會介紹大部分Qt程序中使用到的…

[入門]NUC13配置Ubuntu20.04詳細步驟

文章目錄 1. 安裝Ubuntu20.041.1 制作系統啟動盤1.1.1 下載鏡像文件1.1.2 配置啟動盤 1.2 安裝內存條、硬盤1.3 安裝系統 2. 網卡驅動配置2.1 關閉安全啟動2.2 安裝intel官方網卡驅動backport2.2.1 第四步可能會出現問題 2.3 ubuntu官方的驅動2.4 重啟 3. 軟件安裝3.1 錄屏軟件…

(七)Reactor響應式編程框架

一、簡介 Reactor 是運行在 JVM 上的編程框架&#xff0c;最大特點是完全非阻塞&#xff0c;能高效控制 “背壓”&#xff0c;簡單來說就是處理數據傳輸時速度不匹配的問題 。它能和 Java 8 里的一些功能直接搭配使用&#xff0c;像處理異步結果的 CompletableFuture、處理數據…

從邊緣到核心:群聯云防護如何重新定義安全加速邊界?

一、安全能力的全方位碾壓 1. 協議層深度防護 四層防御&#xff1a; 動態過濾畸形TCP/UDP包&#xff08;如SYN Flood&#xff09;&#xff0c;傳統CDN僅限速率控制。技術示例&#xff1a;基于AI的協議指紋分析&#xff0c;攔截異常連接模式。 七層防御&#xff1a; 精準識別業…

【Linux】Ubuntu 24.04 LTS 安裝 OpenJDK 8

目錄 通過 apt-get 直接安裝 JDK 1. 更新 apt 軟件源 2. 檢查 JDK 是否已安裝 3. 安裝OpenJDK 4. 檢查 JDK 是否成功安裝 5. 設置 JAVA_HOME 環境變量 找到需要設置的 Java 路徑 使用文本編輯器打開/etc/environment文件 添加 Java 安裝路徑 應用更改和驗證配置 通過…