Qt C++ QListWidgetItem 核心用法:從數(shù)據(jù)綁定到性能優(yōu)化
這次我們來看 Qt C 中一個非常核心的 GUI 組件類QListWidgetItem。如果你正在用 Qt 開發(fā)桌面應(yīng)用并且需要處理列表、圖標、復(fù)選框、自定義數(shù)據(jù)這些功能那么這個類就是你繞不開的基石。它不僅僅是QListWidget里一個簡單的條目更是實現(xiàn)復(fù)雜列表交互、數(shù)據(jù)綁定和界面美化的關(guān)鍵。很多開發(fā)者對QListWidget很熟悉但對其內(nèi)部的QListWidgetItem管理卻一知半解導(dǎo)致在實現(xiàn)多選、拖拽、樣式定制或性能優(yōu)化時遇到瓶頸。本文將直接切入QListWidgetItem的核心能力從創(chuàng)建、屬性設(shè)置、數(shù)據(jù)管理到高級用法通過代碼示例帶你徹底掌握。無論你是要做一個文件管理器、任務(wù)列表還是需要支持復(fù)選框和圖標的自定義列表視圖這篇文章都能提供可直接落地的解決方案。1. 核心能力速覽在深入細節(jié)之前我們先通過一個表格快速了解QListWidgetItem能做什么以及它的基本特性。能力項說明所屬模塊Qt Widgets 模塊是QListWidget的組成部分。核心功能代表QListWidget中的一個獨立條目管理其文本、圖標、狀態(tài)、數(shù)據(jù)等。關(guān)鍵特性支持文本、圖標、復(fù)選框、自定義數(shù)據(jù)存儲、狀態(tài)標志選中/禁用等、樣式設(shè)置。創(chuàng)建方式可先創(chuàng)建QListWidgetItem對象再添加到列表或直接由QListWidget::addItem()創(chuàng)建。數(shù)據(jù)存儲通過setData()和data()方法可存儲任意QVariant類型數(shù)據(jù)用于綁定業(yè)務(wù)對象。內(nèi)存管理QListWidget會接管其內(nèi)部QListWidgetItem的生命周期通常無需手動delete。適用場景文件列表、任務(wù)清單、聊天記錄、設(shè)置項列表、任何需要條目化展示和交互的界面。簡單來說QListWidgetItem就是列表視圖中的“細胞”你看到和交互的每一個列表項背后都是一個QListWidgetItem對象在支撐。2. 適用場景與使用邊界QListWidgetItem非常適合快速構(gòu)建具有標準交互的列表界面。它的優(yōu)勢在于集成度高與QListWidget配合開箱即用無需像QListViewQStandardItemModel那樣需要理解模型/視圖框架。它最適合以下場景中小型靜態(tài)或動態(tài)列表列表項數(shù)量在幾百到幾千條內(nèi)容會動態(tài)增刪改。需要豐富視覺表現(xiàn)每個條目需要顯示圖標、不同顏色的文本、復(fù)選框或自定義背景。簡單的數(shù)據(jù)綁定需要將業(yè)務(wù)數(shù)據(jù)如文件路徑、用戶ID、對象指針與列表項關(guān)聯(lián)??焖僭烷_發(fā)希望用最少代碼實現(xiàn)一個功能完整的列表。它的局限性或不適用的場景超大數(shù)據(jù)集數(shù)萬以上QListWidget和QListWidgetItem并非為海量數(shù)據(jù)設(shè)計滾動和渲染性能會下降。此時應(yīng)使用QListView配合自定義模型。高度定制化的單元格渲染如果需要每個單元格內(nèi)嵌入復(fù)雜的自定義控件如進度條、按鈕組合QListWidgetItem的能力有限通常需要子類化QStyledItemDelegate并在QListView中實現(xiàn)。復(fù)雜的排序/過濾邏輯雖然QListWidget支持排序但復(fù)雜的、基于多列或多數(shù)據(jù)源的過濾排序使用QSortFilterProxyModel配合模型/視圖框架更合適。合規(guī)與安全邊界QListWidgetItem本身是純粹的 UI 組件類。需要注意的是通過setData()存儲的數(shù)據(jù)可能包含用戶敏感信息如路徑、ID。在應(yīng)用設(shè)計中應(yīng)避免在QListWidgetItem中明文存儲密碼等關(guān)鍵憑證。同時當列表項被刪除時其存儲的QVariant數(shù)據(jù)會被自動清理但如果存儲的是指向堆內(nèi)存的指針需要開發(fā)者自行管理指針所指對象的生命周期防止內(nèi)存泄漏。3. 環(huán)境準備與前置條件要實踐本文內(nèi)容你需要一個可運行的 Qt C 開發(fā)環(huán)境。操作系統(tǒng)Windows、macOS 或 Linux 均可。Qt 是跨平臺的。Qt 版本推薦使用 Qt 5.12 及以上版本或 Qt 6.2 及以上版本。本文示例代碼在 Qt 5.15 和 Qt 6.5 上測試通過核心 API 保持高度一致。開發(fā)工具IDE: Qt Creator首選與 Qt 集成度最高、Visual Studio配合 Qt VS Tools、CLion 等。編譯器: MSVC (Windows)、GCC (Linux)、Clang (macOS) 均可。項目配置確保你的項目文件.pro中包含了widgets模塊。QT core gui widgets對于 CMake 項目確保find_package(Qt6 COMPONENTS Widgets REQUIRED)并target_link_libraries(your_target Qt6::Widgets)。基礎(chǔ)知識需要具備基本的 C 和 Qt 編程知識了解信號與槽機制。4. QListWidgetItem 的創(chuàng)建與基本屬性設(shè)置讓我們從最基礎(chǔ)的開始如何創(chuàng)建一個列表項并設(shè)置其顯示內(nèi)容。4.1 創(chuàng)建與添加條目有兩種主要方式將條目添加到QListWidget中。方式一先創(chuàng)建QListWidgetItem再添加。這種方式可以更精細地配置條目后再加入列表。// 假設(shè)有一個名為 listWidget 的 QListWidget 指針 QListWidget *listWidget new QListWidget(this); // 創(chuàng)建 QListWidgetItem 對象 QListWidgetItem *item new QListWidgetItem(); // 設(shè)置條目顯示的文本 item-setText(這是一個列表項); // 將條目添加到列表控件中 listWidget-addItem(item);方式二使用QListWidget的便捷方法直接添加。這種方法更簡潔適用于快速添加簡單文本項。// 直接添加文本項QListWidget 內(nèi)部會創(chuàng)建 QListWidgetItem listWidget-addItem(直接添加的文本項); // 添加帶圖標的項 listWidget-addItem(QIcon(:/images/icon.png), 帶圖標的項);4.2 設(shè)置文本、圖標與字體創(chuàng)建條目后我們可以全方位地定制它的外觀。QListWidgetItem *item new QListWidgetItem(); // 1. 設(shè)置文本 item-setText(主要顯示文本); // 2. 設(shè)置圖標顯示在文本左側(cè) item-setIcon(QIcon(:/resources/file.png)); // 3. 設(shè)置字體、顏色 QFont font item-font(); font.setBold(true); font.setPointSize(10); item-setFont(font); // 設(shè)置文本顏色 item-setForeground(QBrush(Qt::blue)); // 設(shè)置背景顏色 item-setBackground(QBrush(QColor(240, 240, 240))); // 4. 設(shè)置文本對齊方式對于多行文本或特定布局有用 item-setTextAlignment(Qt::AlignCenter); // 居中對齊 listWidget-addItem(item);4.3 啟用復(fù)選框Checkbox這是QListWidgetItem一個非常實用的功能可以輕松實現(xiàn)任務(wù)列表、多選列表。QListWidgetItem *item new QListWidgetItem(可選任務(wù)); // 關(guān)鍵設(shè)置條目的標志啟用可勾選狀態(tài) item-setFlags(item-flags() | Qt::ItemIsUserCheckable); // 設(shè)置復(fù)選框的初始狀態(tài)未選中 item-setCheckState(Qt::Unchecked); // 也可以設(shè)置為選中狀態(tài) // item-setCheckState(Qt::Checked); listWidget-addItem(item);當用戶點擊復(fù)選框時條目的checkState()會發(fā)生變化。你可以通過連接QListWidget的itemChanged(QListWidgetItem*)信號來響應(yīng)狀態(tài)變更。5. 數(shù)據(jù)存儲與關(guān)聯(lián)setData 和 data 方法這是QListWidgetItem最強大的功能之一。它允許你為每個條目關(guān)聯(lián)任意類型的自定義數(shù)據(jù)從而將視圖顯示與底層業(yè)務(wù)邏輯緊密綁定。5.1 存儲和讀取自定義數(shù)據(jù)QListWidgetItem內(nèi)部維護著一個從角色int到值QVariant的映射。Qt 預(yù)定義了一些角色如Qt::DisplayRole對應(yīng)文本Qt::DecorationRole對應(yīng)圖標但我們完全可以使用自定義角色來存儲自己的數(shù)據(jù)。// 定義自定義角色通常從 Qt::UserRole 開始遞增以避免與系統(tǒng)角色沖突 const int FilePathRole Qt::UserRole 1; const int UserIdRole Qt::UserRole 2; QListWidgetItem *item new QListWidgetItem(我的文檔.txt); item-setIcon(QIcon(:/txt.png)); // 存儲數(shù)據(jù)將文件全路徑關(guān)聯(lián)到此條目 item-setData(FilePathRole, QVariant(/home/user/docs/myfile.txt)); // 存儲另一個數(shù)據(jù)用戶ID item-setData(UserIdRole, QVariant(1001)); listWidget-addItem(item);當需要獲取這些數(shù)據(jù)時例如響應(yīng)用戶雙擊打開文件// 假設(shè)在 slot 中獲取當前選中的 item QListWidgetItem *currentItem listWidget-currentItem(); if (currentItem) { // 讀取存儲的數(shù)據(jù) QString filePath currentItem-data(FilePathRole).toString(); int userId currentItem-data(UserIdRole).toInt(); qDebug() 文件路徑: filePath; qDebug() 用戶ID: userId; // 現(xiàn)在可以使用 filePath 進行后續(xù)操作如打開文件 }5.2 存儲指針類型數(shù)據(jù)你甚至可以存儲指向 C 對象的指針但必須格外小心生命周期管理。// 假設(shè)有一個自定義的業(yè)務(wù)對象 class TaskObject { public: QString name; int priority; // ... 其他成員 }; TaskObject *task new TaskObject(); task-name 編寫報告; task-priority 5; QListWidgetItem *item new QListWidgetItem(task-name); // 將對象指針存儲為 QVariant。注意QVariant 可以封裝指針。 item-setData(Qt::UserRole, QVariant::fromValue(task)); // 讀取時 TaskObject *retrievedTask item-data(Qt::UserRole).valueTaskObject*(); if (retrievedTask) { qDebug() 任務(wù)優(yōu)先級: retrievedTask-priority; }重要警告如果你以這種方式存儲指針當QListWidgetItem被刪除如清空列表時指針并不會被自動delete。你需要確保在適當?shù)臅r候例如在QListWidget的析構(gòu)函數(shù)或clear()之前手動清理這些對象否則會導(dǎo)致內(nèi)存泄漏。一種更安全的方式是存儲對象的唯一標識符如ID而非指針本身。6. 條目狀態(tài)、標志與交互控制QListWidgetItem提供了一系列標志flags來控制用戶如何與它交互。6.1 理解條目標志Flags標志是Qt::ItemFlags類型的枚舉值組合決定了條目的行為。QListWidgetItem *item new QListWidgetItem(可交互項); // 獲取當前標志 Qt::ItemFlags currentFlags item-flags(); qDebug() 默認標志: currentFlags; // 常用的標志設(shè)置 // 啟用可選默認已啟用 item-setFlags(item-flags() | Qt::ItemIsSelectable); // 啟用可拖拽作為拖拽源 item-setFlags(item-flags() | Qt::ItemIsDragEnabled); // 禁用條目變灰不可交互 item-setFlags(item-flags() ~Qt::ItemIsEnabled); // 啟用可編輯雙擊可修改文本 item-setFlags(item-flags() | Qt::ItemIsEditable); // 組合使用創(chuàng)建一個可選中、可拖拽、但不可編輯的項 item-setFlags(Qt::ItemIsSelectable | Qt::ItemIsDragEnabled | Qt::ItemIsEnabled);6.2 選中狀態(tài)與多選模式條目的選中狀態(tài)與QListWidget的選擇模式selectionMode密切相關(guān)。// 設(shè)置列表的選擇模式 listWidget-setSelectionMode(QAbstractItemView::SingleSelection); // 單選 listWidget-setSelectionMode(QAbstractItemView::MultiSelection); // 多選按住Ctrl listWidget-setSelectionMode(QAbstractItemView::ExtendedSelection); // 擴展多選Shift/Ctrl listWidget-setSelectionMode(QAbstractItemView::ContiguousSelection); // 連續(xù)多選Shift // 以編程方式設(shè)置某個條目為選中狀態(tài) item-setSelected(true); // 獲取所有選中的條目 QListQListWidgetItem* selectedItems listWidget-selectedItems(); for (auto *selItem : selectedItems) { qDebug() 選中項: selItem-text(); }6.3 條目啟用與禁用禁用一個條目會使其變灰并且無法被選中、編輯或觸發(fā)其他交互。item-setFlags(item-flags() ~Qt::ItemIsEnabled); // 禁用 // item-setFlags(item-flags() | Qt::ItemIsEnabled); // 重新啟用通過判斷item-flags() Qt::ItemIsEnabled可以得知條目是否被禁用。7. 高級功能與實戰(zhàn)技巧掌握了基礎(chǔ)后我們來看一些提升體驗和效率的高級用法。7.1 自定義條目高度與行間距默認情況下條目高度由字體和圖標決定。你可以手動設(shè)置固定高度。// 設(shè)置單個條目的高度 item-setSizeHint(QSize(item-sizeHint().width(), 60)); // 高度設(shè)為60像素 // 如果你想統(tǒng)一設(shè)置所有條目的高度可以在 QListWidget 的樣式表中設(shè)置 // listWidget-setStyleSheet(QListWidget::item { min-height: 40px; });7.2 使用自定義 Widget 作為條目替代方案雖然QListWidgetItem本身不支持嵌入復(fù)雜控件但QListWidget提供了setItemWidget方法可以將一個QWidget子類如QPushButton、QProgressBar設(shè)置到條目上完全覆蓋其默認渲染。QListWidgetItem *item new QListWidgetItem(listWidget); listWidget-addItem(item); // 創(chuàng)建一個自定義的小部件比如一個按鈕和一個標簽的水平布局 QWidget *widget new QWidget(); QHBoxLayout *layout new QHBoxLayout(widget); QLabel *label new QLabel(自定義內(nèi)容); QPushButton *button new QPushButton(操作); layout-addWidget(label); layout-addWidget(button); layout-setContentsMargins(5, 2, 5, 2); widget-setLayout(layout); // 將小部件設(shè)置到條目上 listWidget-setItemWidget(item, widget); // 連接按鈕的信號 connect(button, QPushButton::clicked, [item](){ qDebug() 按鈕被點擊所屬條目文本是: item-text(); });注意使用setItemWidget后該條目的文本、圖標等由QListWidgetItem管理的屬性將不再顯示完全由你提供的widget接管。同時性能上需要留意如果列表項非常多每個項都承載一個復(fù)雜的widget會影響滾動性能。7.3 排序與查找QListWidget內(nèi)置了簡單的排序和查找功能。// 啟用排序點擊列表頭如果設(shè)置了 setHeaderLabel listWidget-setSortingEnabled(true); // 以編程方式排序根據(jù)文本 listWidget-sortItems(Qt::AscendingOrder); // 升序 listWidget-sortItems(Qt::DescendingOrder); // 降序 // 查找包含特定文本的項 QListQListWidgetItem* foundItems listWidget-findItems(關(guān)鍵詞, Qt::MatchContains); for (auto *foundItem : foundItems) { foundItem-setBackground(QBrush(Qt::yellow)); // 高亮顯示 }7.4 拖放操作支持實現(xiàn)拖放需要同時設(shè)置QListWidget和QListWidgetItem的標志并可能重寫相關(guān)事件。啟用拖放listWidget-setDragEnabled(true); // 允許作為拖拽源 listWidget-setAcceptDrops(true); // 允許接受拖拽放入 listWidget-setDropIndicatorShown(true); // 顯示拖放指示器 // 設(shè)置拖放模式 listWidget-setDragDropMode(QAbstractItemView::InternalMove); // 內(nèi)部移動 // listWidget-setDragDropMode(QAbstractItemView::DragDrop); // 拖拽和放置對于需要支持拖拽的條目確保其標志包含Qt::ItemIsDragEnabled。對于復(fù)雜的自定義拖放數(shù)據(jù)你可能需要重寫QListWidget的mimeData()、dropMimeData()等方法。8. 性能考量與最佳實踐當列表項數(shù)量增多時正確的使用方式對保持界面流暢至關(guān)重要。批量操作當需要添加或刪除大量項目時使用QListWidget的setUpdatesEnabled(false)和setUpdatesEnabled(true)包裹操作可以避免每步操作都觸發(fā)界面重繪極大提升性能。listWidget-setUpdatesEnabled(false); for (int i 0; i 1000; i) { listWidget-addItem(QString(Item %1).arg(i)); } listWidget-setUpdatesEnabled(true); // 所有項目添加完畢后一次性更新UI避免在循環(huán)中頻繁查詢例如避免在循環(huán)內(nèi)調(diào)用listWidget-item(i)-text()尤其是當i很大時。如果需要處理所有項的數(shù)據(jù)先獲取QListQListWidgetItem*再遍歷。慎用setItemWidget如前所述每個自定義widget都是獨立的 Qt 對象大量使用會消耗較多內(nèi)存和 CPU。對于復(fù)雜的單元格考慮使用QListView和自定義delegate進行繪制性能更優(yōu)。及時清理數(shù)據(jù)如果存儲了自定義數(shù)據(jù)特別是指針在清除列表項clear()或刪除項takeItem()前確保妥善處理這些數(shù)據(jù)防止內(nèi)存泄漏。對于超長列表如果數(shù)據(jù)量真的非常大例如日志查看器QListWidget可能不是最佳選擇。考慮使用QListView搭配一個只按需提供數(shù)據(jù)的模型如QAbstractListModel的子類這是 Qt 模型/視圖框架的核心優(yōu)勢。9. 常見問題與排查方法在使用QListWidgetItem過程中你可能會遇到以下典型問題。問題現(xiàn)象可能原因排查方式解決方案條目顯示為空白1. 未設(shè)置setText或文本為空。2. 使用了setItemWidget覆蓋了默認顯示。檢查item-text()和是否調(diào)用了setItemWidget。確保設(shè)置了文本或調(diào)整setItemWidget的使用邏輯。復(fù)選框不顯示未設(shè)置Qt::ItemIsUserCheckable標志。檢查item-flags()。調(diào)用item-setFlags(item-flags() | Qt::ItemIsUserCheckable)。存儲的數(shù)據(jù)讀取失敗1. 存儲和讀取使用的角色值不一致。2. 數(shù)據(jù)未成功存儲檢查setData返回值。打印item-data(role)的類型和值。確保使用相同的角色常量并檢查setData調(diào)用是否成功。程序崩潰訪問非法內(nèi)存存儲了對象指針但在指針所指對象銷毀后仍訪問了該條目。檢查指針的生命周期管理。使用唯一ID代替原始指針或建立嚴格的父子/所有權(quán)關(guān)系。拖放操作無效1.QListWidget的拖放模式未正確設(shè)置。2. 條目未啟用Qt::ItemIsDragEnabled標志。檢查dragDropMode()和item-flags()。正確設(shè)置setDragDropMode和條目的flags。大量項導(dǎo)致界面卡頓1. 未使用批量更新。2. 每個項都使用了復(fù)雜的setItemWidget。使用性能分析工具。使用setUpdatesEnabled(false/true)包裹批量操作考慮改用QListViewDelegate。自定義樣式不生效樣式表設(shè)置不正確或優(yōu)先級被覆蓋。檢查樣式表語法和應(yīng)用對象。確保樣式表應(yīng)用于正確的控件如QListWidget::item并使用!important提升優(yōu)先級謹慎使用。10. 總結(jié)與下一步QListWidgetItem是 Qt Widgets 中構(gòu)建列表界面最直接、最易用的工具之一。通過本文你應(yīng)該已經(jīng)掌握了從創(chuàng)建、顯示、數(shù)據(jù)綁定到狀態(tài)控制的全流程。它的核心價值在于快速實現(xiàn)和數(shù)據(jù)關(guān)聯(lián)——通過setData/data方法你能輕松地將界面上的一個條目與后臺的任何業(yè)務(wù)數(shù)據(jù)聯(lián)系起來。在實際項目中建議你首先驗證基礎(chǔ)功能創(chuàng)建一個簡單的列表實現(xiàn)增、刪、改、查并測試復(fù)選框和圖標顯示。接著實現(xiàn)數(shù)據(jù)綁定嘗試將文件路徑、數(shù)據(jù)庫記錄ID等與列表項關(guān)聯(lián)并能在事件如雙擊中正確取出。然后處理用戶交互連接itemClicked、itemDoubleClicked、itemChanged等信號實現(xiàn)完整的業(yè)務(wù)邏輯。最后考慮優(yōu)化如果列表項數(shù)量增長到數(shù)百上千應(yīng)用第8節(jié)提到的性能最佳實踐。當你需要更復(fù)雜的表格多列、樹形結(jié)構(gòu)或面對海量數(shù)據(jù)時便是深入學(xué)習(xí) Qt模型/視圖框架QTableView、QTreeView配合QAbstractItemModel的最佳時機。那時你會感謝QListWidget和QListWidgetItem為你打下的堅實基礎(chǔ)。建議收藏本文在開發(fā)過程中隨時查閱。

相關(guān)新聞

CTFshow XSS靶場實戰(zhàn):5類Payload繞過技巧與防御原理詳解

CTFshow XSS靶場實戰(zhàn):5類Payload繞過技巧與防御原理詳解

1. 項目概述:從CTFshow XSS靶場到實戰(zhàn)Payload庫最近在帶新人過CTFshow的Web入門系列,特別是XSS(跨站腳本攻擊)相關(guān)的關(guān)卡,發(fā)現(xiàn)很多朋友卡在了各種過濾規(guī)則上。這些關(guān)卡設(shè)計得很有意思,它們不是簡單地讓你彈…

2026/8/2 1:54:35 閱讀更多
Base64編碼原理與鹽值混淆實戰(zhàn):從概念到安全邊界

Base64編碼原理與鹽值混淆實戰(zhàn):從概念到安全邊界

1. 項目概述:從“編碼”到“加密”的認知跨越Base64,一個在程序員世界里幾乎無處不在的術(shù)語。無論是處理郵件附件、在HTTP協(xié)議中傳輸二進制數(shù)據(jù),還是在網(wǎng)頁中嵌入圖片,你都能看到它的身影。然而,一個普遍的誤解是&…

2026/8/2 1:54:35 閱讀更多
游戲模組制作實戰(zhàn):從腳本修改到武器配置的完整指南

游戲模組制作實戰(zhàn):從腳本修改到武器配置的完整指南

在游戲開發(fā)或模組制作領(lǐng)域,為經(jīng)典游戲創(chuàng)作新的劇本、關(guān)卡或角色,是許多資深玩家和技術(shù)愛好者深入探索游戲機制、實現(xiàn)個人創(chuàng)意的常見方式。這個過程不僅需要對游戲引擎和資源文件有深刻理解,還需要具備一定的腳本編寫、關(guān)卡設(shè)計和平衡性調(diào)整能…

2026/8/2 3:14:38 閱讀更多
【計算機工具類-CI和CD工具Skills】aws-serverless 技能

【計算機工具類-CI和CD工具Skills】aws-serverless 技能

在AWS上構(gòu)建生產(chǎn)就緒的無服務(wù)器應(yīng)用程序的專門技能。涵蓋Lambda函數(shù)、API Gateway、DynamoDB、SQS/SNS事件驅(qū)動模式、SAM/CDK部署和冷啟動優(yōu)化。 技能概述 aws-serverless 技能提供了在AWS上構(gòu)建生產(chǎn)就緒的無服務(wù)器應(yīng)用程序的專家模式和最佳實踐。它涵蓋了Lambda函數(shù)、API Ga…

2026/8/2 3:14:38 閱讀更多
密碼正則驗證全鏈路實踐:從安全原理到前后端實現(xiàn)

密碼正則驗證全鏈路實踐:從安全原理到前后端實現(xiàn)

1. 項目概述:為什么密碼驗證遠不止“8位”這么簡單?“密碼必須包含大小寫字母、數(shù)字、特殊字符,且至少8位”——這個規(guī)則,幾乎每個上網(wǎng)沖浪的人都見過。乍一看,它像是一道簡單的數(shù)學(xué)題,組合一下字符集&…

2026/8/2 3:14:38 閱讀更多
Java后端集成EasyNVR視頻平臺:SpringBoot對接API實戰(zhàn)與優(yōu)化

Java后端集成EasyNVR視頻平臺:SpringBoot對接API實戰(zhàn)與優(yōu)化

1. 項目概述與背景最近在做一個安防監(jiān)控相關(guān)的項目,需要把分散在不同地點的網(wǎng)絡(luò)攝像頭視頻流集中管理起來,并且要能通過我們自己的后臺系統(tǒng)進行實時預(yù)覽、錄像回放和設(shè)備控制。市面上成熟的視頻平臺不少,但要么太貴,要么二次開發(fā)接…

2026/8/2 3:14:38 閱讀更多
Jetson Orin Nano存儲擴容實戰(zhàn):將/home遷移至reComputer

Jetson Orin Nano存儲擴容實戰(zhàn):將/home遷移至reComputer

1. 項目緣起:為什么要把Orin Nano的/home挪到reComputer上?最近在折騰Jetson Orin Nano Developer Kit,這玩意兒性能是真不錯,但有個老問題又冒出來了:內(nèi)置的eMMC存儲空間實在不夠看。我裝了幾個開發(fā)環(huán)境,比…

2026/8/2 3:14:38 閱讀更多
3分鐘搞定!QQ空間歷史說說完整備份終極指南

3分鐘搞定!QQ空間歷史說說完整備份終極指南

3分鐘搞定!QQ空間歷史說說完整備份終極指南 【免費下載鏈接】GetQzonehistory 獲取QQ空間發(fā)布的歷史說說 項目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾想過,那些年發(fā)過的QQ空間說說,那些記錄青春的文字…

2026/8/2 0:04:01 閱讀更多
3分鐘搞定!QQ空間歷史說說完整備份終極指南

3分鐘搞定!QQ空間歷史說說完整備份終極指南

3分鐘搞定!QQ空間歷史說說完整備份終極指南 【免費下載鏈接】GetQzonehistory 獲取QQ空間發(fā)布的歷史說說 項目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾想過,那些年發(fā)過的QQ空間說說,那些記錄青春的文字…

2026/8/2 0:04:01 閱讀更多
AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O分配PCB板是應(yīng)用材料(Applied Materials)公司生產(chǎn)的一款用于半導(dǎo)體設(shè)備的I/O信號分配電路板。該型號(0100-02186)的核心特點如下:專用于Endura等半導(dǎo)體工藝腔室。集成信號路由與分配功能。連接控制…

2026/8/2 2:51:21 閱讀更多
Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動機

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動機

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動機是日本日清(Nissei)品牌的一款工業(yè)用三相異步電機,適用于自動化設(shè)備及通用機械驅(qū)動。該型號(FFMN-32L-10-T0 40AX)的核心特點如下:三相交流異步電動機。額定…

2026/8/2 2:52:49 閱讀更多