QSettings用法實戰(相機配置文件的寫入和讀取)

很多情況,在做項目開發的時候,將參數獨立出來是比較好的方法
例如:相機的曝光次數、曝光時長等參數,獨立成ini文件,用戶可以在外面修改即可生效,無需在動代碼重新編譯等工作
QSettings便可以實現該功能

內容:用戶在UI界面輸入相機的曝光時間、次數,點擊保存,生成camera.ini配置文件,下次點擊加載時自動加載并使用

一、新建項目

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
項目結構如下:
在這里插入圖片描述
頁面布局如下:
在這里插入圖片描述
稍微美化一下:
在這里插入圖片描述

這個Qt生成的UI類名稱在這里可以修改
在這里插入圖片描述

二、QSettingsStudy.h

1,出于習慣,我將類放在了beyondyanyu命名空間下
2,相機配置文件包含曝光次數number_和曝光時間timer_
3,配置文件存放的路徑為config_path_
4,兩個button(保存加載)對應兩個槽函數(on_pushButton_save_clickedon_pushButton_load_clicked

#pragma once#include <QtWidgets/QMainWindow>
#include "ui_QSettingsStudy.h"namespace beyondyanyu
{class QSettingsStudy : public QMainWindow{Q_OBJECTpublic:QSettingsStudy(QWidget* parent = nullptr);~QSettingsStudy();int number_ = 0;double timer_ = 0.0;QString config_path_ = "./setting/camera_param.ini";private:Ui::QSettingsStudyClass ui;void on_pushButton_save_clicked();void on_pushButton_load_clicked();};
}

三、main.cpp

1,因為我用到了命名空間,故這里Qt的UI類需要注意一下,也要添加命名空間beyondyanyu::QSettingsStudy w;

#include "QSettingsStudy.h"
#include <QtWidgets/QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);beyondyanyu::QSettingsStudy w;w.show();return a.exec();
}

四、QSettingsStudy.cpp

1,連接信號和槽
保存配置文件和加載配置文件
connect(ui.pushButton_save, &QPushButton::clicked, this, &QSettingsStudy::on_pushButton_save_clicked);
connect(ui.pushButton_load, &QPushButton::clicked, this, &QSettingsStudy::on_pushButton_load_clicked);

2,保存配置文件
①創建QSettings對象settings,保存的類型為ini格式
QSettings settings(config_path_, QSettings::IniFormat);
②開始組,需要起個組名:settings.beginGroup("Parameters");
③成員,鍵值對顯示出現:
settings.setValue("exposureNum", number_); // 曝光次數
settings.setValue("exposureTime", timer_); // 曝光時間
④結束組:settings.endGroup();
⑤查看setting的狀態是否正常
QSettings::NoError

3,加載配置文件
①創建QSettings對象settings,加載數據的類型為ini格式
QSettings settings(config_path_, QSettings::IniFormat);
②讀取相機參數
settings.beginGroup("Parameters");//前提得知道組名才行
number_ = settings.value("exposureNum", number_).toInt(); // 默認值 0(當鍵不存在時)
timer_ = settings.value("exposureTime", timer_).toInt();
settings.endGroup();
③拿到配置文件的信息進行顯示
ui.doubleSpinBox_number->setValue(number_);
ui.doubleSpinBox_time->setValue(timer_);

#include "QSettingsStudy.h"#include <QSettings>
#include <QDebug>
#include <QFileDialog>
#include <QMessageBox>namespace beyondyanyu 
{QSettingsStudy::QSettingsStudy(QWidget* parent): QMainWindow(parent){ui.setupUi(this);connect(ui.pushButton_save, &QPushButton::clicked, this, &QSettingsStudy::on_pushButton_save_clicked);connect(ui.pushButton_load, &QPushButton::clicked, this, &QSettingsStudy::on_pushButton_load_clicked);}void QSettingsStudy::on_pushButton_save_clicked() {number_ = ui.doubleSpinBox_number->value();timer_ = ui.doubleSpinBox_time->value();// 創建 QSettings 對象(指定 INI 格式)QSettings settings(config_path_, QSettings::IniFormat);// 寫入相機內參(整數類型)settings.beginGroup("Parameters");settings.setValue("exposureNum", number_);    // 曝光次數settings.setValue("exposureTime", timer_);    // 曝光時間settings.endGroup();// 強制同步到磁盤settings.sync();// 檢查寫入狀態if (settings.status() == QSettings::NoError) {qDebug() << "succeed:" << config_path_;//彈出對話框QMessageBox::information(this, "tips", "save succeed");}else {qDebug() << "defeat";//彈出對話框QMessageBox::warning(this, "error", "save failed");}}void QSettingsStudy::on_pushButton_load_clicked(){//打開文件夾選擇對話框QString fileName = QFileDialog::getOpenFileName(this, "Open .ini file", "", "INI Files (*.ini)");// 如果選擇了文件,則讀取配置文件if (!fileName.isEmpty()) {config_path_ = fileName;QSettings settings(config_path_, QSettings::IniFormat);// 讀取相機內參settings.beginGroup("Parameters");number_ = settings.value("exposureNum", number_).toInt();    // 默認值 0(當鍵不存在時)timer_ = settings.value("exposureTime", timer_).toInt();settings.endGroup();// 輸出結果qDebug() << "相機配置:";qDebug() << "曝光次數:" << number_;qDebug() << "曝光時間:" << timer_;ui.doubleSpinBox_number->setValue(number_);ui.doubleSpinBox_time->setValue(timer_);return;}qDebug() << "open error";return;}QSettingsStudy::~QSettingsStudy(){}
}

五、效果展示

1,運行初始狀態
在這里插入圖片描述
2,保存
在這里插入圖片描述
在這里插入圖片描述

3,修改camera_param.ini配置參數
在這里插入圖片描述

4,加載
在這里插入圖片描述
在這里插入圖片描述

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

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

相關文章

運維培訓班之最佳選擇(The best Choice for Operation and Maintenance Training Courses)

運維培訓班之最佳選擇 從面試官的角度聊聊培訓班對運維的幫助&#xff0c;同時給培訓班出身的運維一些建議~ 談到運維&#xff08;尤其是零基礎非科班轉行的運維&#xff09;找工作&#xff0c;培訓班是個不可回避的討論熱點。雖然本人也做過兼職運維培訓老師&#xff0c;多少…

網絡安全與防護策略

隨著信息技術的飛速發展&#xff0c;互聯網已成為現代社會不可或缺的一部分。從日常生活到企業運營&#xff0c;幾乎所有活動都離不開網絡。然而&#xff0c;網絡的開放性和廣泛性也使得網絡安全問題愈發嚴峻。無論是個人數據泄露&#xff0c;還是大規模的網絡攻擊&#xff0c;…

LLM 分詞器Tokenizer 如何從 0 到 1 訓練出來

寫在前面 大型語言模型(LLM)處理的是人類的自然語言,但計算機本質上只能理解數字。Tokenizer(分詞器) 就是架在自然語言和計算機數字表示之間的一座至關重要的橋梁。它負責將我們輸入的文本字符串分解成模型能夠理解的最小單元——Token,并將這些 Token 轉換成對應的數字…

【ArcGIS微課1000例】0142:如何從谷歌地球保存高清影像圖片

文章目錄 一、選取影像區域1. 搜索地圖區域2. 導入矢量范圍二、添加輸出圖層三、保存高清影像1. 地圖選項2. 輸出分辨率3. 保存圖像四、注意事項一、選取影像區域 首先需要選取影像區域,可通過以下方式快速定位。 1. 搜索地圖區域 在搜索框內輸入關鍵詞,例如青海湖,點擊【…

Unity注冊表修改分辨率:探索幕后設置與手動調控

Unity注冊表修改分辨率&#xff1a;探索幕后設置與手動調控 在Unity開發中&#xff0c;調整分辨率和顯示模式是開發過程中常見的需求&#xff0c;尤其是當我們打包并運行應用時&#xff0c;可能會遇到顯示模式不符合預期的情況。Unity在首次運行時會自動保存這些設置&#xff…

外部流輸入的 Layer

在 Android 的 SurfaceFlinger 體系中&#xff0c;外部流輸入的 Layer 通常通過 Sideband Stream 或 BufferQueue 機制傳遞給 SurfaceFlinger&#xff0c;然后由 HWC&#xff08;Hardware Composer&#xff09;或 OpenGL ES 進行合成。 1. 什么是外部流輸入的 Layer&#xff1f…

31-體測管理系統

介紹 技術&#xff1a; 基于 B/S 架構 SpringBootMySQLvueelementui 環境&#xff1a; Idea mysql maven jdk1.8 node 用戶端功能 1.系統首頁展示輪播圖及公告信息 2.測試項目:展示可以參加測試的項目列表 3.公告信息:公告信息列表及詳情 可進行點贊和收藏 4.在線留言 5.個人…

NVR接入錄像回放平臺EasyCVR視頻系統守護舌尖上的安全,打造“明廚亮灶”云監管平臺

一、方案背景 近年來&#xff0c;餐飲行業食品安全和衛生等問題頻發&#xff0c;比如后廚衛生臟亂差等&#xff0c;持續引發關注&#xff0c;這些事情導致連鎖反應&#xff0c;使其收益遭受損失。同時&#xff0c;給消費者造成了心理和生理上的傷害。 加強餐飲行業的監管成為…

Python辦公自動化(3)對Excel的操作

1.讀取excel文件 1.安裝工具 終端下載讀取excel文檔的工具庫&#xff1a; pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple xlrd 若對版本有特殊需求&#xff1a; 刪除當前版本&#xff1a;pip3 uninstall xlrd 下載所需要的版本&#xff1a;pip3 install -i htt…

go語言:開發一個最簡單的用戶登錄界面

1.用deepseek生成前端頁面&#xff1a; 1.提問&#xff1a;請你用html幫我設計一個用戶登錄頁面&#xff0c;要求特效采用科技感的背景渲染加粒子流動&#xff0c;用css、div、span標簽&#xff0c;并給出最終合并后的代碼。 生成的完整代碼如下&#xff1a; <!DOCTYPE h…

blender二次元上色

前&#xff1a; 后&#xff1a;&#xff08;臉自己會發光) 參考&#xff1a;05-模型導入與材質整理_嗶哩嗶哩_bilibili

Mysql+Demo 獲取當前日期時間的方式

記錄一下使用Mysql獲取當前日期時間的方式 獲取當前完整的日期時間有常見的四種方式&#xff0c;獲取得到的默認格式(mysql的格式標準)是 %Y-%m-%d %H:%i:%s其它格式 %Y-%m-%d %H:%i:%s.%f方式一&#xff1a;now()函數 select now();mysql> select now(); -------------…

C#核心學習(六)面向對象--封裝(5)靜態成員及靜態構造函數和靜態類 以及和常量的區別

目錄 一、什么是靜態的&#xff1f;什么是常量&#xff1f; 1. ?靜態&#xff08;Static&#xff09;? 2. ?常量&#xff08;const&#xff09;? 二、類中的靜態成員有什么用&#xff1f; 1. ?共享數據 2. ?工具方法與全局配置 3. ?單例模式 三、靜態類和靜態成…

FreeRTOS源碼下載分享

FreeRTOS源碼下載分享 官網下載太慢了&#xff0c;分享下FreeRTOSv202411 FreeRTOSv202411.00.zip 鏈接: https://pan.baidu.com/s/1P4sVS5WroYEl0WTlPD7GXg 提取碼: g6aq

2025年win10使用dockerdesktop安裝k8s

一、寫作背景 百度了一圈&#xff0c; 要么教程老&#xff0c;很多操作步驟冗余&#xff0c; 要么跑不通&#xff0c;或者提供的鏈接失效等情況。 二、看前須知 1、安裝過程使用的AI輔助&#xff0c; 因為參考的部分博客卡柱了。 2、如果操作過程中遇到卡頓&#xff0c; …

一段式端到端自動駕駛:UniAD:Planning-oriented Autonomous Driving

論文地址:https://arxiv.org/pdf/2212.10156 代碼地址:https://github.com/OpenDriveLab/UniAD 1. 摘要 現代自動駕駛系統通常由一系列按順序執行的模塊任務構成,例如感知、預測和規劃。為了完成多種任務并實現高級別的智能化,當前的方法要么為每個任務部署獨立模型,要…

【企業文化】CXO是什么?

李升偉 整理 CXO 是企業中高層管理職位的統稱&#xff0c;其中的 “X” 是一個變量&#xff0c;代表不同的職能領域。CXO 通常指企業最高管理層中的各個負責人&#xff0c;他們共同參與企業的戰略決策和運營管理。以下是一些常見的 CXO 職位及其職責&#xff1a; 1. CEO&…

python中的 f 是什么意思,f‘{username}_log_archive_{int(time.time())}.txt‘

python中的 f 是什么意思,f’{username}log_archive{int(time.time())}.txt’ 在 Python 中,f 是一種字符串前綴,用于創建格式化字符串(也稱為 f-string),它是 Python 3.6 及更高版本引入的一種方便的字符串格式化方式。 基本語法和功能 當你在字符串前加上 f 前綴時,…

論文淺嘗 | Interactive-KBQA:基于大語言模型的多輪交互KBQA(ACL2024)

轉載至&#xff1a;何駿昊 開放知識圖譜 原文地址&#xff1a;論文淺嘗 | Interactive-KBQA&#xff1a;基于大語言模型的多輪交互KBQA&#xff08;ACL2024&#xff09; 筆記整理&#xff1a;何駿昊&#xff0c;東南大學碩士&#xff0c;研究方向為語義解析 論文鏈接&#xff…

MySQL注入中user-agent和cookie存在的注入

uagent注入 1、漏洞成因&#xff1a; 當Web應用程序將用戶提供的User-Agent值未經處理直接拼接到SQL查詢語句時&#xff0c;攻擊者可以通過構造惡意User-Agent值閉合原有SQL語句并注入任意SQL代碼。 2、以less-18為例&#xff1a; 相比前幾關&#xff0c;第18關對于uname和pa…