QML QtCharts坐標軸系統

QtCharts是Qt框架中強大的數據可視化模塊,它提供了豐富的圖表類型和靈活的坐標軸系統,能夠滿足各種數據展示需求。本文將全面介紹QML中QtCharts的坐標軸系統,包括數值坐標軸(ValueAxis)、對數坐標軸(LogValueAxis)、分類坐標軸(CategoryAxis)、柱形圖分類坐標軸(BarCategoryAxis)和日期時間坐標軸(DateTimeAxis),通過詳細的屬性方法表格和實際代碼示例,幫助開發者掌握這些核心組件的使用技巧。

QtCharts坐標軸系統概述

QtCharts模塊為QML提供了一套完整的圖表解決方案,其中坐標軸系統是數據可視化的基礎框架。坐標軸不僅定義了數據的展示維度,還影響著圖表的可讀性和交互性。在QML中使用QtCharts需要先在項目中添加charts模塊支持,并在QML文件中導入相應的模塊:

// 在.pro文件中添加
QT += charts
// 在QML文件中導入
import QtCharts 2.15

QtCharts支持五種主要類型的坐標軸,每種都有其特定的應用場景和配置方式:

  1. ?數值坐標軸(ValueAxis)??:處理線性數值數據,最常用的坐標軸類型
  2. ?對數坐標軸(LogValueAxis)??:用于展示數據范圍跨度大的對數尺度數據
  3. ?分類坐標軸(CategoryAxis)??:顯示非數值的類別標簽
  4. ?柱形圖分類坐標軸(BarCategoryAxis)??:專為柱狀圖優化的分類坐標軸
  5. ?日期時間坐標軸(DateTimeAxis)??:處理時間序列數據,支持自動時間格式化

在QML中,這些坐標軸通常與ChartView組件配合使用,ChartView作為圖表的容器,可以包含各種系列(Series)和坐標軸(Axis)組件。下面我們將分別深入探討每種坐標軸的特性和用法。

數值坐標軸(ValueAxis)與對數坐標軸(LogValueAxis)

?ValueAxis基本特性與用法

ValueAxis是QtCharts中最基礎的數值坐標軸,用于線性數值數據的展示。它提供了精確的刻度控制和靈活的數值范圍設置。

?ValueAxis常用屬性和方法:??

屬性/方法類型描述
minreal坐標軸最小值
maxreal坐標軸最大值
tickCountint刻度線數量(包括最小和最大刻度)
labelFormatstring標簽顯示格式,如"%.2f"表示兩位小數
titleTextstring坐標軸標題文本
gridVisiblebool是否顯示網格線
labelsVisiblebool是否顯示標簽
labelsAngleint標簽旋轉角度(度)
lineVisiblebool是否顯示軸線
setRange(min, max)function動態設置坐標軸范圍

?ValueAxis示例代碼:??

import QtQuick 2.15
import QtCharts 2.15ChartView {anchors.fill: parent  // 填充父容器antialiasing: true  // 開啟抗鋸齒,使線條更平滑title: "線性數值坐標軸示例"LineSeries {name: "線性增長"XYPoint { x: 0; y: 1 }XYPoint { x: 1; y: 3 }XYPoint { x: 2; y: 2 }XYPoint { x: 3; y: 4 }XYPoint { x: 4; y: 5 }axisX: ValueAxis {min: 0max: 4tickCount: 5labelFormat: "%.1f"titleText: "X軸"}axisY: ValueAxis {min: 0max: 5tickCount: 6labelFormat: "%d"titleText: "Y軸"}}}

?

LogValueAxis對數坐標軸

LogValueAxis繼承自ValueAxis,專門用于處理對數尺度數據。當數據范圍跨越多個數量級時,使用對數坐標可以更好地展示數據變化趨勢。

?LogValueAxis特有屬性:??

屬性類型描述
basereal對數的底數(默認為10)
minorTickCountint主刻度間的小刻度數量
logBasereal同base,對數底數

?重要注意事項:??

  • 對數坐標軸只能顯示正值,負值或零值會導致圖表無法正確顯示
  • 設置范圍時,min必須大于0
  • 標簽格式會自動適應對數顯示

?LogValueAxis示例代碼:??

import QtQuick 2.15
import QtCharts 2.15ChartView {anchors.fill: parentantialiasing: truetitle: "對數坐標軸示例"LineSeries {name: "指數增長"XYPoint { x: 1; y: 0.1 }XYPoint { x: 2; y: 1 }XYPoint { x: 3; y: 10 }XYPoint { x: 4; y: 100 }XYPoint { x: 5; y: 1000 }axisX: ValueAxis {min: 1max: 5tickCount: 5}axisY: LogValueAxis {min: 0.1max: 1000minorTickCount: 8titleText: "對數坐標(Y)"labelFormat: "%.1e"  // 科學計數法格式}}}

?

分類坐標軸(CategoryAxis)與柱形圖分類坐標軸(BarCategoryAxis)

CategoryAxis基本用法

CategoryAxis用于顯示非數值的類別標簽,適用于離散數據的展示。與數值坐標軸不同,分類坐標軸的刻度是固定的類別名稱而非連續數值。

?CategoryAxis常用屬性和方法:??

屬性/方法類型描述
categorieslist類別名稱列表
countint類別數量(只讀)
startValuereal起始值(通常不需要設置)
labelsPositionenumeration標簽位置(AxisLabelsPosition.Center或AxisLabelsPosition.OnValue)
append(categories)function添加類別
replace(oldCategory, newCategory)function替換類別
remove(category)function刪除類別
clear()function清除所有類別

?CategoryAxis示例代碼:??

import QtQuick 2.15
import QtCharts 2.15ChartView {title: "Line"  // 設置圖表標題為"Line"anchors.fill: parent  // 填充父容器antialiasing: true  // 啟用抗鋸齒渲染,使線條更平滑// 數值型X軸(連續數據)ValueAxis {id: xAxismin: 0  // 最小值為0max: 1000  // 最大值為1000labelFormat: "%.1f"  // 標簽顯示格式為保留1位小數minorTickCount: 1  // 每個主刻度間的小刻度數量tickCount: 5  // 主刻度數量(影響軸標簽密度)}// 分類型Y軸(離散數據)CategoryAxis {id: yAxismin: 0  // 最小值(邏輯起點)max: 1000  // 最大值(邏輯終點)labelsPosition: CategoryAxis.AxisLabelsPositionOnValue  // 標簽顯示在對應值的位置// 定義分類范圍及標簽(將連續值映射為離散類別)CategoryRange {label: "Low"  // 標簽文本endValue: 200  // 范圍結束值(0-200為"Low")}CategoryRange {label: "Normal"  // 200-700為"Normal"endValue: 700}CategoryRange {label: "High"  // 700-1000為"High"endValue: 1000}}// 定義折線圖系列LineSeries {name: "LineSeries"  // 系列名稱(可用于圖例顯示)axisX: xAxis  // 綁定X軸axisY: yAxis  // 綁定Y軸(注意:分類軸會將實際值映射到對應范圍標簽)// 定義數據點(注意Y值會被分類軸映射到最近的CategoryRange)XYPoint {x: 0; y: 2}    // 映射到"Low"XYPoint {x: 100; y: 32}  // 映射到"Low"XYPoint {x: 300; y: 128} // 映射到"Normal"XYPoint {x: 600; y: 256} // 映射到"Normal"XYPoint {x: 1000; y: 1024} // 超出max(1000)可能顯示異常}}

?

BarCategoryAxis專有特性

BarCategoryAxis是CategoryAxis的擴展,專門為柱狀圖優化。它提供了更精確的柱形位置控制和標簽對齊方式。

?BarCategoryAxis特有屬性:??

屬性類型描述
gridVisiblebool是否顯示網格線
labelsPositionenumeration標簽位置(僅Center或OnValue有效)
truncateLabelsbool是否截斷過長的標簽
labelsMaxLengthint標簽最大長度(字符數)

?BarCategoryAxis高級用法:??

ChartView {title: "BarSeries"anchors.fill: parentantialiasing: trueBarSeries {id: barSeriesaxisX: BarCategoryAxis {categories: ["2007", "2008", "2009", "2010", "2011", "2012"]}BarSet { label: "Bob"; values: [2, 2, 3, 4, 5, 6]}BarSet { label: "Susan"; values: [5, 1, 2, 4, 1, 7] }BarSet { label: "James"; values: [3, 5, 8, 13, 5, 8] }}}

?

?動態更新分類數據

分類坐標軸經常需要與動態數據綁定,以下是幾種常見的動態更新模式:

?直接替換整個類別列表:??

barAxis.categories = ["新類別1", "新類別2", "新類別3"]

?使用append添加新類別:??

barAxis.append("新增類別")

日期時間坐標軸(DateTimeAxis)

DateTimeAxis核心功能

DateTimeAxis是處理時間序列數據的專用坐標軸,它能夠自動根據時間范圍調整刻度間隔和標簽格式,非常適合展示股票價格、傳感器數據等時間相關的數據。

?DateTimeAxis常用屬性和方法:??

屬性/方法類型描述
minQDateTime時間軸最小值
maxQDateTime時間軸最大值
formatstring時間標簽顯示格式(如"yyyy-MM-dd")
tickCountint刻度線數量
titleTextstring坐標軸標題
setRange(min, max)function設置時間范圍
rangeChangedsignal時間范圍變化時觸發

?時間格式字符串說明:??

格式描述示例
yyyy4位數年份2023
MM2位數月份01-12
dd2位數日期01-31
hh2位數小時(24小時制)00-23
mm2位數分鐘00-59
ss2位數秒00-59
APAM/PM指示AM或PM

DateTimeAxis基本示例

ChartView {id: chartViewanchors.fill: parenttitle: "股票價格走勢"antialiasing: trueLineSeries {name: "收盤價"axisX: DateTimeAxis {id: dateAxisformat: "MMM yyyy"tickCount: 7titleText: "日期"min: new Date(2023, 0, 15)  //0代表數組下標索引,對應1月份max: new Date(2023, 6, 1)   //6代表7月份}axisY: ValueAxis {titleText: "價格(元)"min: 50max: 150}// 添加時間序列數據點XYPoint { x: chartView.toMsecsSinceEpoch(new Date(2023, 0, 1)); y: 98.5 }XYPoint { x: chartView.toMsecsSinceEpoch(new Date(2023, 1, 1)); y: 105.2 }XYPoint { x: chartView.toMsecsSinceEpoch(new Date(2023, 2, 1)); y: 112.7 }XYPoint { x: chartView.toMsecsSinceEpoch(new Date(2023, 3, 1)); y: 125.3 }XYPoint { x: chartView.toMsecsSinceEpoch(new Date(2023, 4, 1)); y: 118.9 }XYPoint { x: chartView.toMsecsSinceEpoch(new Date(2023, 5, 1)); y: 132.4 }}function toMsecsSinceEpoch(date) {return date.getTime()}}

?

動態時間序列數據處理

實際應用中,時間序列數據通常來自動態數據源,如網絡API或數據庫。下面是一個更接近真實場景的示例:

import QtQuick
import QtQuick.Controls
import QtChartsWindow {width: 640height: 480visible: truetitle: qsTr("Hello World")property var timeData: []ChartView {id: chartanchors.fill: parenttitle: "實時傳感器數據"antialiasing: trueLineSeries {id: seriesname: "溫度(℃)"axisX: DateTimeAxis {id: timeAxisformat: "hh:mm:ss"titleText: "時間"}axisY: ValueAxis {id: valueAxistitleText: "溫度值"min: 20max: 30}}}// 模擬實時數據更新Timer {interval: 1000running: truerepeat: trueonTriggered: {var now = new Date()var value = 25 + Math.random() * 5 - 2.5  // 隨機波動// 添加到數據數組timeData.push({time: now, value: value})// 保持最多100個點if(timeData.length > 100) {timeData.shift()}// 更新圖表series.clear()for(var i = 0; i < timeData.length; i++) {series.append(timeData[i].time.getTime(), timeData[i].value)}// 自動調整時間范圍顯示最近1分鐘var minTime = new Date(now.getTime() - 60000)  // 60秒前timeAxis.min = minTimetimeAxis.max = now// 自動調整Y軸范圍var minVal = 25, maxVal = 25timeData.forEach(item => {minVal = Math.min(minVal, item.value)maxVal = Math.max(maxVal, item.value)})valueAxis.min = Math.floor(minVal) - 1valueAxis.max = Math.ceil(maxVal) + 1}}
}

?

多時間序列與高級配置

對于更復雜的應用場景,可能需要展示多個時間序列并配置更豐富的交互功能:

ChartView {id: chartViewanchors.fill: parenttitle: "多參數監控"legend.alignment: Qt.AlignBottomantialiasing: truemargins.top: 50margins.bottom: 0// 共享的時間軸DateTimeAxis {id: sharedTimeAxisformat: "MM-dd hh:mm"tickCount: 8titleText: "時間"gridVisible: truelabelsFont.bold: true}// 溫度序列LineSeries {name: "溫度(℃)"axisX: sharedTimeAxisaxisY: ValueAxis {titleText: "溫度(℃)"min: 15max: 35labelsColor: "#e74c3c"lineVisible: truegridLineColor: "#e74c3c"}color: "#e74c3c"width: 2style: Qt.DashLine}// 濕度序列LineSeries {name: "濕度(%)"axisX: sharedTimeAxisaxisY: ValueAxis {titleText: "濕度(%)"min: 30max: 90labelsColor: "#3498db"lineVisible: truegridLineColor: "#3498db"}color: "#3498db"width: 2}// 壓力序列LineSeries {name: "壓力(hPa)"axisX: sharedTimeAxisaxisY: ValueAxis {titleText: "壓力(hPa)"min: 980max: 1020labelsColor: "#2ecc71"lineVisible: truegridLineColor: "#2ecc71"}color: "#2ecc71"width: 2}}// 模擬數據加載Component.onCompleted: {loadData()}function loadData() {var now = new Date()var tempSeries = chartView.series(0)var humiditySeries = chartView.series(1)var pressureSeries = chartView.series(2)tempSeries.clear()humiditySeries.clear()pressureSeries.clear()// 生成模擬數據for(var i = 0; i < 24; i++) {var time = new Date(now.getTime() - (23 - i) * 3600000)  // 過去24小時// 溫度數據(正弦波動)var temp = 25 + 5 * Math.sin(i * Math.PI / 12)// 濕度數據(遞減趨勢)var humidity = 80 - i * 0.5 + Math.random() * 10 - 5// 壓力數據(小幅波動)var pressure = 1010 + Math.random() * 10 - 5// 添加數據點tempSeries.append(time.getTime(), temp)humiditySeries.append(time.getTime(), humidity)pressureSeries.append(time.getTime(), pressure)}// 設置時間軸范圍sharedTimeAxis.min = new Date(now.getTime() - 23 * 3600000)sharedTimeAxis.max = now}// 工具欄ToolBar {id: toolBarwidth: parent.widthRow {spacing: 10padding: 5Button {text: "24小時"onClicked: {var now = new Date()sharedTimeAxis.min = new Date(now.getTime() - 24 * 3600000)sharedTimeAxis.max = now}}Button {text: "7天"onClicked: {var now = new Date()sharedTimeAxis.min = new Date(now.getTime() - 7 * 24 * 3600000)sharedTimeAxis.max = nowsharedTimeAxis.format = "MM-dd"}}ComboBox {model: ["溫度", "濕度", "壓力", "全部"]onCurrentTextChanged: {for(var i = 0; i < 3; i++) {chartView.series(i).visible = (currentText === "全部" ||(i === 0 && currentText === "溫度") ||(i === 1 && currentText === "濕度") ||(i === 2 && currentText === "壓力"))}}}}}

?

坐標軸的高級應用與性能優化

大量數據渲染的性能優化

當處理大量數據點時,圖表性能可能成為瓶頸。以下是幾種優化策略:

  1. ?數據采樣?:顯示大量數據時,只渲染部分采樣點
  2. ?禁用動畫?:對于頻繁更新的數據,禁用不必要的動畫效果
  3. ?使用OpenGL加速?:在支持的平臺上啟用OpenGL渲染
  4. ?分塊加載?:對于極大數據集,采用分塊加載策略

?優化示例代碼:??

ChartView {id: perfChartwidth: 800height: 500animationOptions: ChartView.NoAnimation  // 禁用動畫renderTarget: ChartView.GL  // 使用OpenGL加速(如果可用)dropShadowEnabled: false  // 禁用陰影提高性能LineSeries {id: highPerfSeriesuseOpenGL: true  // 啟用OpenGL加速pointsVisible: false  // 不顯示數據點(僅線)// 采樣函數function appendSampled(data, sampleInterval) {var buffer = []for(var i = 0; i < data.length; i += sampleInterval) {buffer.push(Qt.point(data[i].x, data[i].y))if(buffer.length > 1000) {  // 避免一次添加太多點highPerfSeries.append(buffer)buffer = []}}if(buffer.length > 0) {highPerfSeries.append(buffer)}}}// 加載大數據function loadLargeData() {var rawData = []// 生成10000個數據點for(var i = 0; i < 10000; i++) {rawData.push({x: i, y: Math.sin(i/100)*50 + 50})}// 采樣間隔為10highPerfSeries.appendSampled(rawData, 10)}
}

自定義坐標軸標簽和樣式

QtCharts允許深度自定義坐標軸的外觀,包括標簽樣式、網格線樣式等:

DateTimeAxis {id: customAxisformat: "hh:mm"titleText: "自定義時間軸"labelsFont {family: "Consolas"pixelSize: 12bold: trueitalic: true}labelsColor: "#e67e22"gridLineColor: "#95a5a6"gridVisible: truelineVisible: truelineColor: "#34495e"lineWidth: 2shadesVisible: trueshadesColor: "#f9f9f9"shadesBorderColor: "#e0e0e0"
}

坐標軸事件處理

通過信號和槽機制,可以響應坐標軸的各種事件,如范圍變化、點擊等:

ValueAxis {id: interactiveAxismin: 0max: 100onMinChanged: console.log("新的最小值:", min)onMaxChanged: console.log("新的最大值:", max)// 通過MouseArea處理交互MouseArea {anchors.fill: parentonClicked: {console.log("坐標軸被點擊")interactiveAxis.titleText = "交互式坐標軸(已點擊)"}}
}

總結與最佳實踐

QtCharts提供了強大而靈活的坐標軸系統,能夠滿足各種數據可視化需求。通過本文的介紹,我們了解了五種主要坐標軸類型的特點和使用場景:

  1. ?ValueAxis?:適用于常規數值數據,提供精確的線性刻度控制
  2. ?LogValueAxis?:適合大范圍數據,使用對數尺度展示指數關系
  3. ?CategoryAxis?:用于非數值的類別數據展示
  4. ?BarCategoryAxis?:專為柱狀圖優化的分類坐標軸
  5. ?DateTimeAxis?:處理時間序列數據,支持智能時間格式化

?最佳實踐建議:??

  1. ?選擇合適的坐標軸類型?:根據數據類型和展示需求選擇最合適的坐標軸
  2. ?合理設置范圍?:確保坐標軸范圍能夠充分展示數據特征,又不至于過于寬泛
  3. ?優化性能?:對于大數據集,采用采樣、禁用動畫等技術提高渲染性能
  4. ?增強可讀性?:通過適當的標簽格式、旋轉角度和字體設置提高圖表可讀性
  5. ?提供交互?:實現坐標軸聯動、范圍縮放等交互功能提升用戶體驗

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

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

相關文章

TI 2025全國電賽猜題

本科組可能的題目方向本科組器材更側重高頻信號處理、復雜控制系統、精密測量及多設備協同&#xff0c;可能涉及以下題目&#xff1a;四旋翼飛行器相關任務題目示例&#xff1a;設計 “基于四旋翼的 UV 光控自主導航系統”任務要求&#xff1a;利用四旋翼飛行器&#xff08;最大…

Python自動化運維實戰指南

什么是自動化運維定義與背景自動化運維是指利用工具和腳本自動執行傳統上需要人工操作的IT運維任務&#xff0c;包括但不限于服務器配置管理、軟件部署、監控告警、日志分析等日常工作。隨著互聯網業務規模的擴大&#xff0c;傳統手工運維方式已無法滿足快速部署、規模化管理等…

k8s的csi對接GPFS

在 Kubernetes&#xff08;k8s&#xff09;集群中&#xff0c;通過 CSI&#xff08;Container Storage Interface&#xff09;對接 GPFS&#xff08;General Parallel File System&#xff0c;現為 IBM Spectrum Scale&#xff09;是實現高性能共享存儲的重要方案。GPFS 作為并…

HTB賽季8靶場 - era

nmap掃描 └─$ nmap -p- --min-rate 1000 -T4 10.129.137.201 -oA nmapfullscan Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-07-27 21:19 EDT Warning: 10.129.137.201 giving up on port because retransmission cap hit (6). …

Bug貓學習史#1:面向對象

在Java編程中&#xff0c;掌握幾個核心概念對深入學習至關重要&#xff1a;類屬性建議采用包裝類以提升靈活性&#xff1b;建造者模式中this關鍵字能有效簡化對象構建過程&#xff1b;static關鍵字涉及類的加載機制&#xff1b;接口默認使用public修飾符并支持默認方法實現&…

優測推出HarmonyOS全場景測試服務,解鎖分布式場景應用卓越品質!

隨著HarmonyOS NEXT“純血鴻蒙”的全面商用&#xff0c;生態正以前所未有的速度重構終端操作系統格局。對于APP廠商而言&#xff0c;應用測試需要從單一設備思維向場景化服務驗證轉變。優測云服務平臺正式推出 HarmonyOS全場景測試解決方案&#xff0c;針對鴻蒙系統提供功能測試…

二層環路與三層環路:原理、區別與解決方案全解析

網絡環路是網絡運維中最常見也最具破壞性的問題之一。本文將深入淺出地解析二層環路和三層環路的核心概念&#xff0c;通過對比分析幫助讀者全面理解這兩種環路的形成機制、危害表現及解決方案。一、環路問題概述 1.1 什么是網絡環路 網絡環路是指數據包在網絡中循環傳輸無法到…

Python爬蟲庫性能與選型實戰指南:從需求到落地的全鏈路解析

目錄 一、性能基準測試&#xff1a;用數據打破認知誤區 1. 靜態頁面采集&#xff1a;效率與資源的終極對決 2. 動態頁面渲染&#xff1a;速度與真實性的博弈 二、場景化選型矩陣&#xff1a;從需求到工具的精準映射 1. 小規模快速原型開發&#xff08;≤1000頁&#xff09;…

uni-app switch(開關選擇器) BUG

uni-app switch&#xff08;開關選擇器&#xff09; BUGBUG&#xff1a;uni-app中的switch的checked屬性并不能根據根據綁定的動態數據進行調整switch開關選擇器&#xff08;BUG&#xff09;switch開關選擇器&#xff08;BUG&#xff09; - 我的使用用途switch開關選擇器&#…

微服務架構中的資源調度與負載均衡實踐

更多云服務器知識&#xff0c;盡在hostol.com在今天這個快速發展的數字化時代&#xff0c;微服務架構已經成為了現代企業系統開發的主流。隨著技術的不斷進步&#xff0c;企業的業務需求也在不斷地變化&#xff0c;傳統的單體架構已經無法滿足日益復雜的應用需求。微服務架構&a…

Rust Web 全棧開發(十一):WebAssembly 嘗鮮

Rust Web 全棧開發&#xff08;十一&#xff09;&#xff1a;WebAssembly 嘗鮮Rust Web 全棧開發&#xff08;十一&#xff09;&#xff1a;WebAssembly 嘗鮮什么是 WebAssembly&#xff1f;安裝 wasm-pack 和 cargo-generate使用項目模板構建項目生成網頁安裝依賴項在 www 中使…

Thymeleaf實戰:SpringBoot用戶管理系統

Thymeleaf 示例代碼下面是完整代碼示例&#xff0c;幫助理解 Thymeleaf 語法和后端代碼的配合&#xff1a;1. 用戶實體類 (User.java)/*** 用戶實體類*/ public class User {private Long id; // 用戶IDprivate String name; // 用戶名private String email; /…

mysql查找數據庫表中某幾個連續的編號中中斷的編號

在MySQL中查找表中連續編號中斷的位置,可以通過以下幾種方法實現: 基于范圍的查詢方法 通過自連接查詢找出ID序列中的斷點,例如查找1-100范圍內缺失的ID: SELECT a.id + 1 AS start, MIN(b.id) - 1 AS end FROM

《劍指offer》-數據結構篇-樹

題目重建二叉樹樹的子結構二叉樹的鏡像從上往下打印二叉樹&#xff08;層序遍歷&#xff09;把二叉樹打印成多行按之字形順序打印二叉樹二叉搜索樹的第k個結點&#xff08;中序遍歷&#xff09;二叉搜索樹的后序遍歷序列&#xff08;后序遍歷&#xff09;二叉樹中和為某一值的路…

系統定時任務擴展開發指南

適用場景當系統內置定時任務類型無法滿足業務需求時&#xff0c;開發者可通過本教程快速掌握自定義定時任務的擴展方法。本指南以"定時檢測服務"為例&#xff0c;演示完整開發流程。我想添加一個定時任務 ,而這里沒有我需要的,我怎么來添加比如我想添加一個定時檢測用…

R語言簡介(附電子書資料)

概述 R語言是一種專為統計計算和數據分析設計的編程語言&#xff0c;自誕生以來&#xff0c;憑借其強大的統計分析能力和豐富的可視化功能&#xff0c;成為數據科學、統計學、機器學習等領域的重要工具。電子書資料&#xff1a;https://pan.quark.cn/s/23050825f2be 一、核心特…

關于前端的性能優化

性能優化主要涵蓋了以下四個方面: (tip:僅代表個人總結,如有不當,還希望看到的大佬多多指示) 減少網絡請求:合并文件、使用 CDN、啟用緩存。 優化資源加載:代碼分割、懶加載、圖片壓縮。 提升渲染性能:減少重繪回流、防抖節流、使用 Web Worker。 監控和迭代:定期使用工…

用 FFmpeg 把視頻輸出為圖片序列

用 FFmpeg 把視頻輸出為圖片序列 【推薦】輸出為PNG圖片序列&#xff08;無損&#xff09; mkdir "D:\Downloads\Recording" ffmpeg -i "C:\Users\33589\Videos\1.mp4" "D:\Downloads\Recording\Recording_%05d.png" 參數含義-i輸入視頻路徑&am…

【linux】高可用集群Keepalived

Keepalived簡介Keepalived 是一個基于 VRRP&#xff08;虛擬路由冗余協議&#xff09;的高可用解決方案&#xff0c;主要用于實現 Linux 服務器的負載均衡和故障轉移。它通過檢測服務器狀態并自動切換服務&#xff0c;確保系統在單點故障時仍能保持可用性Keeplived安裝啟用及配…

如何檢查服務器數據盤是否掛載成功?

在服務器配置過程中&#xff0c;確保數據盤正確掛載是非常重要的。如果數據盤未掛載成功&#xff0c;您可能無法訪問數據盤上的存儲空間。以下是檢查Linux服務器中數據盤是否掛載成功的詳細步驟&#xff0c;以及如何解決掛載問題。1. 檢查數據盤是否掛載成功1.1 使用 df -h 查看…