Qt 綜述:從基礎到一般應用

摘要:?Qt,作為久經考驗的跨平臺C++開發框架,以其強大的功能、豐富的類庫和靈活的機制,在桌面應用、嵌入式系統、網絡編程等領域占據重要地位。本文將深入解析Qt的核心技術體系,涵蓋基礎架構、核心機制、UI開發、外觀定制以及高級功能(繪圖、網絡、并發),助你全面掌握Qt開發精髓。

一、 Qt基石:跨平臺架構與開發環境

  1. 框架定位:一次編寫,到處編譯

    • Qt的核心優勢在于其強大的跨平臺抽象層,能夠無縫支持Windows、Linux、macOS、Android、iOS等主流操作系統。

    • 它屏蔽底層差異,同時精心保留各平臺的原生外觀與交互體驗(如Windows的Aero/Modern風格、macOS的Aqua風格)。知名軟件如WPS Office、VirtualBox、Opera (舊版) 等都基于Qt構建。

    • 核心價值:?極大降低多平臺開發和維護成本。

  2. 開發利器:Qt Creator

    • Qt官方集成開發環境(IDE),是開發Qt應用的首選工具。

    • 核心功能集成:

      • 智能代碼編輯?(C++, QML)

      • 可視化UI設計?(內置Qt Designer)

      • 強大的調試器

      • 項目構建與管理

    • 便捷工作流:?“設計模式”與“編輯模式”一鍵切換,所見即所得。

  3. 項目結構解析

    • 項目文件 (.pro):?工程的核心配置文件,定義源文件(SOURCES)、頭文件(HEADERS)、UI文件(FORMS)、依賴庫、編譯選項等。由qmake工具處理。

    • UI文件 (.ui):?XML格式文件,由Qt Designer創建和編輯,描述界面布局和部件屬性。編譯時(uic工具)會生成對應的C++頭文件。

    • 源文件 (.cpp) & 頭文件 (.h):?實現業務邏輯。通常包含:

      • 繼承自QWidgetQDialogQMainWindow等的自定義窗口類聲明和實現。

      • 信號與槽的連接和實現。

      • 事件處理函數重寫。

      • 核心業務邏輯代碼。

二、 Qt的靈魂:信號與槽與事件驅動

  1. 信號與槽 (Signal & Slot)

    • 核心概念:?Qt獨創的對象間通信機制,用于處理異步事件,替代傳統回調函數,更安全、靈活。

    • 工作流程:

      • 信號 (Signal):?當對象狀態發生改變(如按鈕被點擊clicked())時自動發出。使用signals關鍵字聲明(無需實現)。

      • 槽 (Slot):?響應特定信號的函數。使用slots關鍵字聲明(可以是publicprotectedprivate),需要實現具體邏輯

      • 連接 (Connect):?通過QObject::connect()函數建立信號與槽的關聯。支持一對一、一對多、多對多連接。

    • 關鍵特性:

      • 類型安全:?Qt 5 推薦使用基于函數指針的新語法(connect(sender, &Sender::signal, receiver, &Receiver::slot)),編譯時檢查參數兼容性。舊語法(SIGNAL()/SLOT())在運行時解析。

      • 參數兼容:?信號的參數個數可以多于槽的參數個數,多余的參數會被忽略,類型必須兼容。

      • 自動關聯:?遵循特定命名規則(on_對象名_信號名())的槽函數,可以在UI設計器里或使用QMetaObject::connectSlotsByName()自動連接。

    • 核心優勢:?解耦對象,簡化事件處理流程。

  2. 事件系統 (Event System)

    • 作用:?處理用戶輸入(鍵盤、鼠標)、窗口系統事件、定時器事件等底層交互。

    • 事件類型:

      • Spontaneous 事件:?來自窗口系統(如鼠標點擊)。

      • Posted 事件:?由Qt或應用程序放入事件隊列(如QTimerEvent,?QDeferredDeleteEvent)。

      • Sent 事件:?直接發送到目標對象(如QInputMethodEvent)。

    • 事件處理方式:

      • 重寫事件處理器:?在自定義控件中重寫特定事件函數(如mousePressEvent(),?keyPressEvent(),?paintEvent())。這是最常用的方式。

      • 重寫 event() 函數:?重寫QObject::event(QEvent *e),對所有事件進行統一捕獲和分發。適合需要特殊事件過濾邏輯。

      • 安裝事件過濾器:?在目標對象上調用installEventFilter(QObject *filterObj)。在filterObjeventFilter(QObject *watched, QEvent *event)方法中攔截和處理目標對象的事件。功能強大,常用于監控或修改其他對象的事件。

      • 重寫 QApplication::notify():?實現全局事件處理(慎用,影響所有事件)。

    • 事件傳遞流程:?事件從QApplication::notify()開始,經過可能的事件過濾器,到達目標對象的事件處理器。如果目標對象沒有處理該事件,事件會向上傳遞給其父對象,直到被處理或到達頂層窗口。

三、 構建用戶界面:部件與布局的藝術

  1. 豐富的窗口部件 (Widget)

    • Qt提供了大量預構建的UI控件,均繼承自QWidget基類。

    • 基礎控件:

      • QPushButton?(按鈕)

      • QLabel?(文本/圖片標簽)

      • QLineEdit?(單行文本輸入框)

      • QTextEdit?(多行富文本編輯器)

      • QCheckBox?(復選框)

      • QRadioButton?(單選按鈕)

      • QComboBox?(下拉列表框)

      • QSpinBox/QDoubleSpinBox?(數字調節框)

      • QSlider/QProgressBar?(滑塊/進度條)

      • QListView/QTreeView/QTableView?(模型/視圖組件)

    • 對話框 (Dialog):

      • 模態對話框:?使用exec()彈出,阻塞調用線程,直到對話框關閉。用于必須立即處理的操作(如確認刪除)。

      • 非模態對話框:?使用show()彈出,不阻塞調用線程。用于可并行操作(如查找替換)。

      • 標準對話框:?Qt內置了常用對話框簡化開發:

        • QFileDialog?(文件選擇)

        • QColorDialog?(顏色選擇)

        • QFontDialog?(字體選擇)

        • QMessageBox?(消息提示、警告、錯誤、詢問)

        • QInputDialog?(獲取簡單用戶輸入)

    • 容器控件:?用于組織和分組其他控件。

      • QGroupBox?(帶標題的分組框)

      • QTabWidget?(標簽頁容器)

      • QScrollArea?(帶滾動區域的容器)

      • QStackedWidget?(堆疊窗口,一次顯示一個子控件)

      • QDockWidget?(可停靠窗口 - 常用于QMainWindow)

      • QToolBox?(工具箱)

      • QMdiArea?(多文檔界面區域)

  2. 布局管理器 (Layout Manager)

    • 核心作用:?自動管理窗口中控件的位置和大小,完美適配窗口縮放,告別硬編碼坐標的繁瑣和脆弱性。

    • 核心布局類:

      • QVBoxLayout:垂直排列子控件。

      • QHBoxLayout:水平排列子控件。

      • QGridLayout:網格布局,功能強大,支持控件跨行/跨列放置。

      • QFormLayout:專門用于表單(標簽+輸入控件),自動對齊標簽列。

    • 關鍵屬性控制:

      • 邊距 (Margin):?布局外邊緣與父容器邊緣的距離。

      • 間距 (Spacing):?布局內相鄰控件之間的距離。

      • 伸縮因子 (Stretch):?控制控件在布局空間分配中的相對比例 (setStretchFactor)。數值越大,分配的空間越多。

    • 高級布局助手:

      • 嵌套布局:?可以將布局添加到另一個布局中,構建復雜的界面結構。

      • QSplitter?提供可拖動的分隔條,讓用戶動態調整相鄰控件(或布局)的大小比例,提升交互靈活性。

    • QSpacerItem?用于在布局中插入空白空間(彈簧),輔助控件對齊和空間分配。

四、 打造個性化UI:外觀定制

  1. 風格 (Style) 與 調色板 (Palette)

    • 風格 (QStyle):?定義了控件的整體繪制規則和外觀。Qt內置多種風格(如QWindowsStyle,?QFusionStyle),可通過QApplication::setStyle()設置全局風格,或使用QWidget::setStyle()為特定控件單獨設置。QFusionStyle是現代應用常用的跨平臺統一風格。

    • 調色板 (QPalette):?管理控件在不同狀態下使用的顏色集合。

      • 顏色組 (Color Groups):

        • Active:當前活動窗口的控件。

        • Inactive:非活動窗口的控件。

        • Disabled:被禁用的控件。

      • 顏色角色 (Color Roles):?定義顏色的用途(如Window?- 背景色,?WindowText?- 文本色,?Button?- 按鈕背景,?ButtonText?- 按鈕文字,?Highlight?- 高亮/選中項背景,?HighlightedText?- 高亮項文本等)。

      • 使用方法:?通過QApplication::setPalette()設置全局調色板,或QWidget::setPalette()設置控件局部調色板。使用setColor(QPalette::ColorGroup, QPalette::ColorRole, QColor)setBrush()設置具體顏色/畫刷。

  2. Qt樣式表 (QSS - Qt Style Sheets)

    • 核心概念:?類似于CSS的強大機制,用于對控件外觀進行精細化、聲明式的定制,實現高度個性化的UI設計。

    • 語法基礎:

      • 選擇器 (Selector):?指定應用樣式的控件類型(如QPushButton)、類名(如.MyCustomButton)、對象名(如#okButton)、狀態(偽狀態如:hover,?:pressed,?:checked,?:disabled)、子控件(如QComboBox::drop-down)。

      • 聲明塊:?{ 屬性: 值; ... }

      • 示例:

        QPushButton { /* 所有按鈕基礎樣式 */background-color: #4CAF50; /* 綠色背景 */border: 2px solid #388E3C;border-radius: 5px;color: white;padding: 5px 10px;
        }
        QPushButton:hover { /* 鼠標懸停狀態 */background-color: #66BB6A;
        }
        QPushButton:pressed { /* 按鈕按下狀態 */background-color: #2E7D32;
        }
        QPushButton#okButton { /* ID為okButton的特定按鈕 */font-weight: bold;
        }
        QSlider::groove:horizontal { /* 水平滑塊槽 */height: 8px;background: qlineargradient(x1:0, y1:0, x2:1, y2:0, stop:0 #B1B1B1, stop:1 #c4c4c4);
        }
        QSlider::handle:horizontal { /* 水平滑塊手柄 */width: 18px;margin: -5px 0; /* 讓手柄超出槽的高度 */border-radius: 9px;background: qradialgradient(cx:0.5, cy:0.5, radius:0.5, fx:0.5, fy:0.5, stop:0 #e6e6e6, stop:1 #d4d4d4);
        }

        強大特性:

      • 豐富的屬性:?支持背景、邊框、字體、邊距(margin)、內邊距(padding)、最小/最大尺寸、位置、子控件定位等。

      • 漸變支持:?qlineargradient?(線性),?qradialgradient?(徑向),?qconicalgradient?(錐形)。

      • 狀態組合:?支持多個偽狀態組合(如QCheckBox:checked:hover)。

    • 應用方式:

      • 全局應用:?qApp->setStyleSheet(qssString);?(qAppQApplication的全局實例指針)。

      • 控件局部應用:?myWidget->setStyleSheet(qssString);

      • 文件加載:?通常將QSS代碼保存在.qss文件中,運行時讀取文件內容并應用。

五、 進階能力:繪圖、網絡與并發

  1. 2D繪圖 (QPainter)

    • 核心組件:

      • QPainter:?執行所有繪圖操作的“畫家”。在QPaintDevice上作畫。

      • QPaintDevice:?繪圖設備,代表可以繪制的地方,如QWidget,?QPixmap,?QImage,?QPrinter

      • QPaintEngine:?(內部抽象層) 處理QPainter與具體QPaintDevice的交互,開發者通常不直接接觸。

    • 核心繪圖能力:

      • 繪制基本圖元:?點、線、折線、矩形、圓角矩形、橢圓、弧、弦、餅圖、多邊形、文本、路徑(QPainterPath?- 非常靈活)。

      • 填充與描邊:?設置畫刷(QBrush)填充區域,設置畫筆(QPen)繪制輪廓線(顏色、寬度、線型、端點樣式、連接樣式)。

      • 高級渲染:?抗鋸齒(setRenderHint(QPainter::Antialiasing))、透明度(setOpacity())、合成模式(setCompositionMode())。

      • 坐標變換:?平移(translate())、縮放(scale())、旋轉(rotate())、錯切(shear()),可保存(save())和恢復(restore())變換狀態。

    • 圖像處理類:

      • QImage:?獨立于硬件的圖像表示,提供像素級訪問(pixel(), setPixel()),適合圖像加載、保存、處理和像素操作。

      • QPixmap:?針對屏幕顯示優化的圖像表示,繪圖效率高。主要用于在屏幕上顯示圖像。無法直接訪問像素。

      • QPicture:?記錄和重放QPainter繪圖指令序列,適合存儲矢量圖形命令。

  2. 網絡編程

    • Qt網絡模塊提供高層抽象,簡化網絡通信開發。

    • HTTP/HTTPS:

      • 核心類:?QNetworkAccessManager?(NAM),?QNetworkRequest,?QNetworkReply

      • 工作流:

        1. 創建QNetworkRequest設置URL、頭信息等。

        2. 調用QNetworkAccessManager::get()/post()/put()/deleteResource()發送請求,返回QNetworkReply對象。

        3. 連接QNetworkReply的信號(如finished(),?readyRead(),?downloadProgress(),?errorOccurred())處理響應數據和狀態。

        4. finished()信號處理函數中讀取響應數據(readAll(),?read())并清理QNetworkReply

    • TCP:

      • 服務端:?QTcpServer監聽端口,接受連接(incomingConnection() / nextPendingConnection()),為每個連接創建QTcpSocket進行數據讀寫。

      • 客戶端:?QTcpSocket連接到服務器(connectToHost()),通過read()/write()readyRead()/bytesWritten()信號進行數據交換。

    • UDP:

      • 核心類:?QUdpSocket

      • 無連接協議。通過bind()綁定本地端口,使用writeDatagram()發送數據報到指定主機和端口,通過readDatagram()readyRead()信號接收數據報(包含數據和發送者地址)。

    • 網絡信息:

      • QHostInfo:獲取主機名、IP地址(hostName(), addresses())。

      • QNetworkInterface:枚舉本機網絡接口信息(IP地址、MAC地址、子網掩碼、廣播地址等)。

  3. 進程與線程 (并發)

    • 進程管理 (QProcess):

      • 用于啟動和管理外部程序。

      • 模式:?阻塞(execute())或非阻塞(start())。

      • 信號:?started(),?finished(int exitCode, QProcess::ExitStatus status),?errorOccurred(QProcess::ProcessError error),?stateChanged(QProcess::ProcessState newState),?readyReadStandardOutput(),?readyReadStandardError()

      • 進程間通信 (IPC):

        • 共享內存:?QSharedMemory?(需謹慎處理同步)。

        • 本地套接字:?QLocalServer?/?QLocalSocket?(類似TCP,但用于同一機器上的進程通信)。

        • 標準輸入/輸出管道(QProcess::setStandard*)、命令行參數、環境變量等。

    • 線程編程 (QThread):

      • 核心類:?QThread代表一個線程。

      • 兩種使用模式:

        1. 繼承QThread (舊式 - 不推薦):?重寫run()方法,在run()中執行耗時任務。調用start()啟動線程。

        2. Worker對象 + MoveToThread (推薦):

          • 創建一個繼承QObject的工作者類(Worker),在其中定義槽函數執行任務。

          • 創建一個QThread對象。

          • 創建Worker對象。

          • 調用worker->moveToThread(thread)

          • 將信號連接到Worker的槽。

          • 調用thread->start()啟動線程的事件循環。

          • 通過信號觸發Worker槽中的任務執行。

      • QThread信號:?started(),?finished()

    • 線程同步:?多線程訪問共享資源需同步。

      • QMutex (互斥鎖):?最基本的鎖,保證臨界區代碼互斥訪問。

      • QMutexLocker:?RAII類,在作用域內自動加鎖和解鎖QMutex,避免忘記解鎖。

      • QReadWriteLock (讀寫鎖):?允許多個讀線程并發,但寫線程獨占。提高讀多寫少場景的性能。

      • QReadLocker / QWriteLocker:?RAII類管理QReadWriteLock

      • QSemaphore (信號量):?控制對固定數量資源的并發訪問。

      • QWaitCondition (條件變量):?允許線程在某些條件滿足前掛起(wait()),由其他線程在條件滿足后喚醒(wakeOne()/wakeAll())。通常與QMutex配合使用。

六、 總結:為什么選擇Qt?

Qt是一個功能極其全面且成熟的跨平臺C++開發框架。它通過:

  1. 強大的跨平臺抽象層,實現“一次編寫,到處編譯”,顯著降低多平臺開發成本。

  2. 靈活高效的通信機制 (信號與槽)?和完善的事件系統,構建響應迅速、邏輯清晰的應用程序。

  3. 豐富的預置控件 (Widgets)?和智能的布局管理器 (Layouts),快速搭建美觀、自適應的用戶界面。

  4. 高度可定制的外觀 (QStyle,?QPalette,?QSS),滿足從原生體驗到獨特設計的各種需求。

  5. 強大的高級功能庫 (繪圖,?網絡,?并發,?數據庫,?XML,?多媒體等),覆蓋現代應用開發的絕大部分場景。

  6. 優秀的工具鏈 (Qt Creator)?和完善的文檔與社區支持,保障開發效率和質量。

憑借其模塊化架構卓越的性能廣泛的適用性,Qt已成為開發高性能桌面應用嵌入式設備GUI工業控制軟件車載信息娛樂系統以及跨平臺移動應用的首選框架之一。無論你是初學者還是資深開發者,Qt都提供了構建現代化、健壯、跨平臺應用程序所需的強大工具集。

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

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

相關文章

基于PyTorch一文講清楚損失函數與激活函數并配上詳細的圖文講解

PyTorch損失函數與激活函數 目錄 激活函數詳解損失函數詳解實戰案例性能優化技巧 激活函數詳解 1. 什么是激活函數? 激活函數是神經網絡中的關鍵組件,它決定了神經元是否應該被激活。沒有激活函數,神經網絡就只是線性變換的堆疊&#xf…

蒼穹外賣-Day1 | 環境搭建、nginx、git、令牌、登錄加密、接口文檔、Swagger

目錄 nginx: nginx反向代理和負載均衡概念 nginx反向代理和負載均衡如何配置? 后端環境:maven管理 sky-common sky-pojo sky-server: 后端環境搭建--Git進行版本控制 后端數據庫--Mysql 前后端聯調 前后端運行&#xf…

論文閱讀-ZeroDCE和ZeroDCE++

文章目錄1 概述2 模塊2.1 總體說明2.2 LE曲線(Light Enhance Curve)2.3 DCE-Net2.4 無監督損失2.4.1 空間一致性損失2.4.2 曝光控制損失2.4.3 顏色恒定損失2.4.4 照明平滑度損失2.5 ZeroDCE3 效果3.1 不同損失函數組合的效果3.2 參數設置影響3.3 訓練數據…

Web自動化技術選擇

我想學習自動化技術,我的訴求是: 1.我想做自動報社保功能,先從我們自己的系統里面下載Excel,然后自動登錄到社保局的系統,自動填寫Excel,自動上傳Excel。 2.可以自動的到社保局的系統里面查下數據&#xff…

【celeba】-數據集的介紹

CelebA 數據集在 MTCNN 中的使用 1 數據集結構 CelebA_副本/ ├── Anno/ │ ├── list_bbox_celeba.txt # 邊界框 │ ├── list_landmarks_celeba.txt # 5 關鍵點 │ ├── list_attr_celeba.txt # 40 屬性 │ └── identity_CelebA.txt …

解讀 GPT-5:從“博士級 AI 專家”能力到 OpenAI API Key 獲取與實踐(提示工程→性能調優全流程)

GPT-5深度解讀:一位“博士級專家”的誕生與思考第一部分:新范式——化繁為簡的統一智能體 OpenAI的GPT-5,遠不止是一次常規的模型升級。它的發布,標志著一種顛覆性的架構思想變革:從過去那個讓用戶在各種“Turbo”、“…

8.3.1 注冊服務中心Etcd

etcd是什么 etcd 是一個分布式鍵值對存儲,設計用來可靠而快速的保存關鍵數據并提供訪問。通過分布式鎖, leader選舉保障可靠的分布式協同。 etcd 特點 完全復制,集群中的每個節點均擁有全量數據 強一致性,etcd通過raft共識算法…

異或循環冗余

異或代碼CRC8-ITU例程比較計算CRC16異或改進測試重點代碼 def fun_crc(datas):crc 0xFF poly 0x07 for i in range(len(datas)):for j in range(7, -1, -1):if (crc & 0x80) 0x80: crc (crc << 1) ^ polyelse:crc (crc << 1)if (datas[i] & 2**j):#值…

一款輕量、免費、無廣告,強大的演示工具,支持屏幕放大、涂鴉、截圖、錄屏

軟件介紹 ZoomIt&#xff0c;是一款輕量、免費、無廣告&#xff0c;強大的演示工具&#xff0c;支持屏幕放大、涂鴉、截圖、錄屏等。在系統托盤中不顯示的運行&#xff0c;可自定義快捷鍵&#xff0c;使用方面。 軟件基礎功能 屏幕放大&#xff1a;按下快捷鍵“Ctrl1”可進入…

從街亭失守看管理

最近看了《三國演義》&#xff0c;重溫了街亭失守事件&#xff0c;從馬謖最耀眼的登場來看就是&#xff0c;火燒藤甲兵計策和諸葛亮不謀而合&#xff0c;說明馬謖確實是有真材實料的&#xff0c;但在守街亭的任務上&#xff0c;諸葛亮也躊躇過又對先帝的遺言“馬謖不可重用”記…

全面解析 URL 重定向原理:從協議、實現到安全實踐

一、什么是 URL 重定向&#xff1f; URL 重定向&#xff08;URL Redirection&#xff09;是 Web 技術中一種將用戶請求的 URL 自動轉向另一個目標 URL 的機制。用戶可能完全不會察覺跳轉發生&#xff0c;因為瀏覽器在幕后完成了一切。 重定向通常用于以下場景&#xff1a; 網…

多任務 Transformer 模型的高效任務間注意力

抽象 在計算機視覺和更廣泛的深度學習領域&#xff0c;Transformer 架構已被公認為許多應用程序的最先進技術。然而&#xff0c;對于多任務學習&#xff0c;與單任務模型相比&#xff0c;可能需要更多的查詢&#xff0c;考慮到實際的硬件限制&#xff0c;它的多頭注意力通常接近…

QT的常用控件說明

文章目錄基本的代碼的模板Label控件font字體相關Button 控件CheckBox 控件Radio控件ComboBox控件LineEdit 控件基本的代碼的模板 class MainWindow(QWidget):def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs) # 調用父類初始化方法# 聲明窗口實例# 代…

5Python異常處理與模塊導入全指南

目錄 什么是異常&#xff1f; 異常的捕獲方法&#xff1a; 為什么要捕獲異常&#xff1f; 捕獲異常的語法&#xff1a; 異常的else和finally語法&#xff1a; 什么是異常&#xff1f; 異常就是程序運行過程中出現了錯誤&#xff0c;也就是我們常說的出bug了-。- 異常的捕…

區塊鏈密碼學簡介

區塊鏈密碼學簡介 一、對稱密碼算法 概述 對稱密碼算法的主要特點是使用相同的密鑰進行加密和解密。這類算法根據其加密方式大致可以分為兩類:流密碼和分組密碼。區塊鏈技術主要采用分組密碼。流密碼以數據流的形式逐位或逐字節加密,而分組密碼則將數據分成固定大小的塊進行…

GridKernalGateway

GridKernalGateway 是 Apache Ignite 架構中一個關鍵的安全與狀態管理組件&#xff0c;它的作用是 “在公共 API 和內部內核&#xff08;kernal&#xff09;之間建立安全、可控的訪問通道”。 我們可以把它理解為一個 “門衛 狀態哨兵”&#xff0c;確保外部調用不會在 Ignite…

MySQL索引、B+樹相關知識總結

MySQL索引、B樹相關知識匯總一、有一個查詢需求&#xff0c;MySQL中有兩個表&#xff0c;一個表1000W數據&#xff0c;另一個表只有幾千數據&#xff0c;要做一個關聯查詢&#xff0c;如何優化&#xff1f;1、為關聯字段建立索引2、小表驅動大表二、b樹和b樹的區別1、更高的查詢…

Java學習進階 -- 泛型的繼承和通配符及綜合練習

首先&#xff0c;泛型不具備繼承性&#xff0c;但是數據具備繼承性1.核心概念解析泛型不具備繼承性即使類型A是類型B的子類&#xff0c;Generic<A>也不是Generic<B>的子類這是Java泛型的類型安全設計&#xff0c;防止不安全的類型轉換數據具備繼承性泛型容器中的元…

如何實現在多跳UDP傳輸場景,保證單文件和多文件完整傳輸的成功率?

如何實現在多跳UDP傳輸場景&#xff0c;保證單文件和多文件完整傳輸的成功率&#xff1f; 一、前言 UDP&#xff08;User Datagram Protocol&#xff09;是一個輕量、無連接的傳輸協議&#xff0c;廣泛用于低延遲、高吞吐的應用中&#xff0c;如視頻流、實時游戲等。然而&…

【Spring IoC 核心實現類詳解:DefaultListableBeanFactory】

Spring IoC 核心實現類詳解&#xff08;源碼原理&#xff09;作為 Spring 的靈魂&#xff0c;IoC 容器&#xff08;Inversion of Control&#xff09;是整個框架的核心。 那么 IoC 的“心臟”到底是哪個類&#xff1f;它是怎么管理和裝配 Bean 的&#xff1f;本文將從源碼層面深…