最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Qt使用QSetting記住上次打開路徑的方法

 更新時(shí)間:2026年05月20日 09:31:19   作者:軟件科學(xué)-郝學(xué)勝  
在圖片查看工具的開發(fā)過(guò)程中,我們總會(huì)遇到一些影響使用體驗(yàn)的小痛點(diǎn):無(wú)法記憶用戶上次打開的文件路徑、每次啟動(dòng)都固定在同一目錄、圖片加載后不能自適應(yīng)控件大小,今天,我們就用 Qt 一步步攻克這三大難題,需要的朋友可以參考下

引言

在圖片查看工具的開發(fā)過(guò)程中,我們總會(huì)遇到一些影響使用體驗(yàn)的小痛點(diǎn):無(wú)法記憶用戶上次打開的文件路徑、每次啟動(dòng)都固定在同一目錄、圖片加載后不能自適應(yīng)控件大小。這些看似細(xì)微的問(wèn)題,卻直接拉低了工具的實(shí)用性與流暢度。今天,我們就用 Qt 一步步攻克這三大難題,讓圖片查看器從 “能用” 升級(jí)為 “好用”。

一、前期準(zhǔn)備:代碼備份與方法拆分

在動(dòng)手優(yōu)化前,代碼安全永遠(yuǎn)是第一位!我們先對(duì)原有的文件打開邏輯做完整備份,避免修改出錯(cuò)后無(wú)法回滾。同時(shí),為了讓邏輯更清晰,我們將打開功能拆分為多個(gè)獨(dú)立方法,方便分步調(diào)試與迭代。

// 頭文件中聲明打開方法
private slots:
    void open1();  // 原始打開邏輯備份
    void open2();  // 記錄路徑+默認(rèn)路徑優(yōu)化
    void open3();  // 智能指針優(yōu)化內(nèi)存
    void open4();  // 圖片自適應(yīng)最終版

這里需要注意:在 Qt Creator 中,頭文件聲明方法后,無(wú)法通過(guò)快捷鍵自動(dòng)生成函數(shù)體,需要手動(dòng)在 cpp 文件中實(shí)現(xiàn),這是開發(fā)中容易忽略的小細(xì)節(jié),提前規(guī)避能節(jié)省調(diào)試時(shí)間。

我們先將原始打開代碼復(fù)制到open1()中作為備份,后續(xù)優(yōu)化全部在open2()中開展,保持代碼結(jié)構(gòu)整潔,互不干擾。

二、核心優(yōu)化 1:記住用戶上次打開路徑

用戶每次打開圖片,都希望工具能直接定位到上次使用的目錄,而非重新逐層查找。Qt 本身沒(méi)有自帶 “記憶路徑” 的功能,因此我們需要借助配置文件持久化存儲(chǔ)路徑,實(shí)現(xiàn)打開路徑的自動(dòng)記憶。

1. 配置文件規(guī)劃

我們?cè)诔绦蚓幾g后的debug目錄下,創(chuàng)建config文件夾,用于存放配置文件setting.ini,所有路徑數(shù)據(jù)都將保存在這個(gè)文件中。

2. 獲取配置文件路徑

首先通過(guò) Qt 核心對(duì)象獲取程序 exe 所在目錄,拼接出配置文件的完整路徑:

// 獲取exe所在目錄
QString appPath = QApplication::applicationDirPath();
// 配置文件完整路徑:debug/config/setting.ini
QString iniPath = appPath + "/config/setting.ini";

3. 用 QSettings 讀寫配置文件

Qt 提供的QSettings類是讀寫 ini 配置文件的利器,只需引入頭文件,即可輕松實(shí)現(xiàn)鍵值對(duì)的存儲(chǔ)與讀取:

#include <QSettings>

讀取上次路徑

啟動(dòng)程序時(shí),先從配置文件讀取lastPath字段:

// 初始化配置文件對(duì)象
QSettings* pIni = new QSettings(iniPath, QSettings::IniFormat);
// 讀取上次保存的路徑
QString lastPath = pIni->value("lastPath/path").toString();

// 若首次打開無(wú)記錄,設(shè)置默認(rèn)路徑
if (lastPath.isEmpty()) {
    // 獲取系統(tǒng)默認(rèn)圖片目錄
    lastPath = QStandardPaths::writableLocation(QStandardPaths::PicturesLocation);
}

這里用到QStandardPaths類,它能精準(zhǔn)獲取系統(tǒng)預(yù)設(shè)目錄(桌面、文檔、圖片、音樂(lè)等),避免硬編碼路徑導(dǎo)致的兼容性問(wèn)題。

保存當(dāng)前路徑

用戶選擇圖片后,截取文件所在目錄,寫入配置文件:

// 獲取用戶選擇的文件完整路徑
QString fileName = QFileDialog::getOpenFileName(this, "打開圖片", lastPath, "圖片文件(*.png *.jpg *.jpeg)");
// 截取目錄(去掉文件名)
int endIndex = fileName.lastIndexOf("/");
QString currentPath = fileName.left(endIndex);
// 寫入配置文件
pIni->setValue("lastPath/path", currentPath);

4. 內(nèi)存管理優(yōu)化

手動(dòng)newQSettings對(duì)象必須釋放,否則會(huì)造成內(nèi)存泄漏:

// 手動(dòng)釋放
delete pIni;
pIni = nullptr;

更優(yōu)雅的方式是使用C++11 智能指針****std::unique_ptr,無(wú)需手動(dòng)釋放,自動(dòng)管理內(nèi)存:

#include <memory>
// 智能指針管理QSettings
std::unique_ptr<QSettings> pIni = std::make_unique<QSettings>(iniPath, QSettings::IniFormat);

三、核心優(yōu)化 2:默認(rèn)路徑鎖定系統(tǒng)圖片目錄

傳統(tǒng)圖片查看器默認(rèn)路徑固定,用戶需手動(dòng)切換,我們直接將默認(rèn)路徑設(shè)為系統(tǒng)圖片文件夾,通過(guò)QStandardPaths::PicturesLocation一鍵獲取,無(wú)需手動(dòng)配置,適配 Windows、Linux、macOS 全平臺(tái)。

當(dāng)配置文件無(wú)歷史記錄時(shí),程序自動(dòng)跳轉(zhuǎn)到系統(tǒng)圖片目錄,開箱即用,降低用戶操作成本。

四、核心優(yōu)化 3:圖片自適應(yīng)控件顯示

解決路徑問(wèn)題后,圖片加載失真、無(wú)法適配控件大小的問(wèn)題亟待解決。我們通過(guò)QPixmap的縮放功能,讓圖片完美適配顯示控件。

// 加載圖片
QPixmap* pix = new QPixmap(fileName);
// 獲取顯示標(biāo)簽的大小
QSize labelSize = ui->label->size();
// 圖片自適應(yīng)縮放,保持比例
QPixmap scaledPix = pix->scaled(labelSize, Qt::KeepAspectRatio, Qt::SmoothTransformation);
// 設(shè)置圖片到標(biāo)簽
ui->label->setPixmap(scaledPix);
// 開啟標(biāo)簽內(nèi)容自適應(yīng)
ui->label->setScaledContents(true);

關(guān)鍵參數(shù)說(shuō)明:

  • Qt::KeepAspectRatio:保持圖片寬高比,避免拉伸變形;
  • Qt::SmoothTransformation:平滑縮放,提升圖片顯示清晰度;
  • 圖片加載后需手動(dòng)delete pix,釋放內(nèi)存資源。

五、優(yōu)化成果總結(jié)

經(jīng)過(guò)三步核心優(yōu)化,圖片查看器實(shí)現(xiàn)了三大能力:

  1. 路徑記憶:重啟后直接定位上次打開目錄,告別重復(fù)查找;
  2. 智能默認(rèn):默認(rèn)打開系統(tǒng)圖片目錄,適配全平臺(tái);
  3. 自適應(yīng)顯示:圖片自動(dòng)適配控件大小,清晰不變形。

整個(gè)優(yōu)化過(guò)程圍繞用戶體驗(yàn)展開,用 Qt 原生類實(shí)現(xiàn)輕量改造,代碼簡(jiǎn)潔易維護(hù),沒(méi)有引入第三方依賴,完美解決了初始版本的所有痛點(diǎn)。后續(xù)還可以將路徑存儲(chǔ)升級(jí)為系統(tǒng)注冊(cè)表,進(jìn)一步提升配置的安全性,讓工具更專業(yè)。

以上就是Qt使用QSetting記住上次打開路徑的方法的詳細(xì)內(nèi)容,更多關(guān)于Qt QSetting記住上次打開路徑的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C++ Boost Uuid超詳細(xì)講解

    C++ Boost Uuid超詳細(xì)講解

    Boost是為C++語(yǔ)言標(biāo)準(zhǔn)庫(kù)提供擴(kuò)展的一些C++程序庫(kù)的總稱。Boost庫(kù)是一個(gè)可移植、提供源代碼的C++庫(kù),作為標(biāo)準(zhǔn)庫(kù)的后備,是C++標(biāo)準(zhǔn)化進(jìn)程的開發(fā)引擎之一,是為C++語(yǔ)言標(biāo)準(zhǔn)庫(kù)提供擴(kuò)展的一些C++程序庫(kù)的總稱
    2022-12-12
  • C++11新特性std::tuple的使用方法

    C++11新特性std::tuple的使用方法

    這篇文章主要介紹了C++11新特性-std::tuple的使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • google c++程序測(cè)試框架googletest使用教程詳解

    google c++程序測(cè)試框架googletest使用教程詳解

    &#8203;GoogleTest 是 Google 的 C++ 測(cè)試和模擬框架,可以幫助程序員測(cè)試C++程序的結(jié)果預(yù)期,這篇文章主要介紹了google c++程序測(cè)試框架googletest使用教程,需要的朋友可以參考下
    2021-08-08
  • C++利用LuaIntf調(diào)用Lua的方法示例

    C++利用LuaIntf調(diào)用Lua的方法示例

    這篇文章主要給大家介紹了關(guān)于C++利用LuaIntf調(diào)用Lua以及利用lua-intf來(lái)調(diào)用C++函數(shù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-11-11
  • 一起來(lái)了解一下C++中的指針

    一起來(lái)了解一下C++中的指針

    這篇文章主要為大家詳細(xì)介紹了C++的指針,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-02-02
  • C語(yǔ)言數(shù)字圖像處理之圖像縮放

    C語(yǔ)言數(shù)字圖像處理之圖像縮放

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言數(shù)字圖像處理之圖像縮放,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • C語(yǔ)言刷題判斷鏈表中是否有環(huán)題解

    C語(yǔ)言刷題判斷鏈表中是否有環(huán)題解

    這篇文章主要為大家介紹了C語(yǔ)言刷題判斷鏈表中是否有環(huán)題解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • C語(yǔ)言 字符串首字母轉(zhuǎn)換成大寫簡(jiǎn)單實(shí)例

    C語(yǔ)言 字符串首字母轉(zhuǎn)換成大寫簡(jiǎn)單實(shí)例

    這篇文章主要介紹了C語(yǔ)言 字符串首字母轉(zhuǎn)換成大寫簡(jiǎn)單實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • C++求兩數(shù)之和并返回下標(biāo)詳解

    C++求兩數(shù)之和并返回下標(biāo)詳解

    這篇文章主要介紹了C++求兩數(shù)之和并返回下標(biāo)題目的代碼詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C++運(yùn)算符重載與多繼承及二義性詳解

    C++運(yùn)算符重載與多繼承及二義性詳解

    繼友元知識(shí)過(guò)后,就到了今天的C++運(yùn)算符重載的內(nèi)容了,運(yùn)算符重載是C++里比較重要的內(nèi)容。這篇博文不會(huì)一下子講完各種運(yùn)算符重載,因?yàn)樘嗔肆艘膊缓梦照莆?,所以運(yùn)算符重載我準(zhǔn)備分多次記錄和分享,那么接下來(lái)進(jìn)入正文
    2022-11-11

最新評(píng)論

吕梁市| 九江县| 红安县| 红原县| 神农架林区| 潜江市| 遂平县| 昌图县| 恭城| 黄平县| 民权县| 黄浦区| 两当县| 旺苍县| 襄樊市| 乐东| 曲阜市| 郴州市| 翼城县| 邓州市| 吉木乃县| 商河县| 阜康市| 武宣县| 东山县| 资中县| 江达县| 大名县| 阜阳市| 莲花县| 鲁山县| 乃东县| 苗栗市| 阳原县| 五寨县| 太和县| 岳阳市| 桂东县| 罗定市| 武隆县| 忻城县|