QT——文件IO

QFile 類

構造函數

QFile() 無參構造
? ? 僅僅構建一個QFile 對象,不設定文件名

QFile(文件名)
? ? 構建一個QFile對象的同時,設定文件名
? ? 但是注意,僅僅設定文件名,并不會打開該文件

設定文件名

QFile file
file.setFileName(文件名)
并不會打開

打開文件

file.open(打開模式)

文件寫

qint64 write(const char *data, qint64 maxSize)

? ? file.write(數據,數據長度)//將data,最多maxSize個字節,寫入file代表的文件中?

qint64 write(const char *data)

? ? file.write(數據)//將data,到結束符為止,寫入file代表的文件中?

?qint64 write(const QByteArray &byteArray)

? ? QByteArray本質是c語言的字符數組,做一段內存來管理

我們的數據一般是一個 QString 對象
? ? so要將一個 QString 對象轉換成 QByteArray 對象:
? ??
? ??QString? str = "hello"//QString,有toLocal8Bit() :將QString轉換成 QByteArray
? ? QByteArray? ?qarr = str.toLocal8Bit();

class Widget : public QWidget
{
public:Widget(QWidget *parent = nullptr);~Widget();void save_data(const QString &filename,const QString &data);private:Ui::Widget *ui;QFile file;
};Widget::~Widget()
{QString name=ui->lineEdit->text();save_data("D:/name.text",name);delete ui;
}void Widget::save_data(const QString &filename, const QString &data)
{file.setFileName(filename);file.open(QFile::WriteOnly);file.write(data.toLocal8Bit());file.close();
}

文件讀?

qint64 read(char *data, qint64 maxSize)

? ? char buf[64] = {0}
? ? file.read(buf,64)//從file文件中讀取最多64個字節的數據,并且將讀取到的數據寫入buf中
? ? 返回讀取到的數據的字節數

QByteArray read(qint64 maxSize)

? ? QByteArray? ?qarr = file.read(64)//?從file文件中,讀取最多64個字節的數據,并且將讀取到的數據,構建成一個QByteArray對象后返回

將? QByteArray 數據,轉換成 QString 數據
? ? ? ? 1:在QByteArray 尋找,返回值是 QString,函數名是toXXXX,形參沒有的函數
? ? ? ? 2:在QString的構造函數,尋找參數為 QByteArray 的構造函數
? ? ? ? ? ? 不支持中文
? ? ? ? 3:在QString的靜態方法,尋找返回值為 QString,參數是 QByteArray的函數
? ? ? ? ? ?找到?fromLocal8Bit(),支持中文

QByteArray? ? readAll()

? ? QByteArray arr = file.readAll()//?讀取文件中的全部數據
//將讀取到的數據,構建成 QByteArray 后返回

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QString name=load_data("D:name.text");ui->lineEdit->setText(name);
}QString Widget::load_data(const QString &filename)
{file.setFileName(filename);file.open(QFile::ReadOnly);QByteArray barr=file.readAll();QString str=QString::fromLocal8Bit(barr);file.close();return str;
}

作業

1:在注冊登錄的練習里面,追加一個QListWidget 項目列表
要求:點擊注冊之后,將賬號顯示到 listWidget上面去
以及,在listWidget中雙擊某個賬號的時候,將該賬號刪除?

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QFile>
#include <QListWidgetItem>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();void save_data(const QString &filename, const QString &data);QString load_data(const QString &filename);private slots:void on_lineEdit_textChanged(const QString &arg1);void on_lineEdit_2_textChanged(const QString &arg1);void on_pushButton_3_pressed();void on_pushButton_3_released();void on_checkBox_stateChanged(int arg1);void on_pushButton_clicked();  // 注冊按鈕點擊事件void on_listWidget_doubleClicked(const QModelIndex &index);  // 雙擊刪除賬號
private:Ui::Widget *ui;QFile file;
};#endif // WIDGET_H#include "widget.h"
#include "ui_widget.h"
#include <QMessageBox>
#include <QDebug>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);// 加載用戶名QString name = load_data("D:/name.text");ui->lineEdit->setText(name);// 加載復選框狀態QString ischeck = load_data("D:/ischecked.text");if (ischeck == "1") ui->checkBox->setChecked(true);// 如果復選框被選中,加載密碼if (ui->checkBox->isChecked()) {QString pswd = load_data("D:/pswd.text");ui->lineEdit_2->setText(pswd);}// 初始化按鈕狀態QString nameText = ui->lineEdit->text();QString pswdText = ui->lineEdit_2->text();if (nameText.isEmpty() || pswdText.isEmpty()) {ui->pushButton->setEnabled(false);ui->pushButton_2->setEnabled(false);}
}Widget::~Widget()
{// 保存用戶名和密碼QString name = ui->lineEdit->text();QString pswd = ui->lineEdit_2->text();save_data("D:/name.text", name);save_data("D:/pswd.text", pswd);delete ui;
}void Widget::save_data(const QString &filename, const QString &data)
{file.setFileName(filename);if (!file.open(QFile::WriteOnly)) {QMessageBox::warning(this, "Error", "Failed to save file: " + filename);return;}file.write(data.toLocal8Bit());file.close();
}QString Widget::load_data(const QString &filename)
{file.setFileName(filename);if (!file.open(QFile::ReadOnly)) {return QString();  // 文件不存在時返回空字符串}QByteArray barr = file.readAll();QString str = QString::fromLocal8Bit(barr);file.close();return str;
}void Widget::on_lineEdit_textChanged(const QString &arg1)
{QString name = ui->lineEdit->text();QString pswd = ui->lineEdit_2->text();if (name.isEmpty() || pswd.isEmpty()) {ui->pushButton->setEnabled(false);ui->pushButton_2->setEnabled(false);} else {ui->pushButton->setEnabled(true);ui->pushButton_2->setEnabled(true);}
}void Widget::on_lineEdit_2_textChanged(const QString &arg1)
{QString name = ui->lineEdit->text();QString pswd = ui->lineEdit_2->text();if (name.isEmpty() || pswd.isEmpty()) {ui->pushButton->setEnabled(false);ui->pushButton_2->setEnabled(false);} else {ui->pushButton->setEnabled(true);ui->pushButton_2->setEnabled(true);}
}void Widget::on_pushButton_3_pressed()
{ui->lineEdit_2->setEchoMode(QLineEdit::Normal);
}void Widget::on_pushButton_3_released()
{ui->lineEdit_2->setEchoMode(QLineEdit::Password);
}void Widget::on_checkBox_stateChanged(int arg1)
{save_data("D:/ischecked.text", arg1 == Qt::Checked ? "1" : "0");
}void Widget::on_pushButton_clicked()//注冊
{// 獲取用戶名QString name = ui->lineEdit->text();// 將用戶名添加到 QListWidgetif (!name.isEmpty()) {ui->listWidget->addItem(name);QMessageBox::information(this, "注冊成功", "賬號已添加到列表!");} else {QMessageBox::warning(this, "注冊失敗", "用戶名不能為空!");}
}void Widget::on_listWidget_doubleClicked(const QModelIndex &index)
{// 獲取選中的項QListWidgetItem *item = ui->listWidget->item(index.row());if (item) {// 刪除選中的項delete item;QMessageBox::information(this, "刪除成功", "賬號已從列表中刪除!");}
}#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}

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

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

相關文章

HTML第三節

一.初識CSS 1.CSS定義 A.內部樣式表 B.外部樣式表 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title&g…

xr-frame 3D Marker識別,揚州古牌坊 3D識別技術穩定調研

目錄 識別物體規范 3D Marker 識別目標文件 map 生成 生成任務狀態解析 服務耗時&#xff1a; 對傳入的視頻有如下要求&#xff1a; 對傳入的視頻建議&#xff1a; 識別物體規范 為提高Marker質量&#xff0c;保證算法識別效果&#xff0c;可參考Marker規范文檔 Marker規…

html+js 輪播圖

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>輪播圖示例</title><style>/* 基本樣式…

NAT 代理服務 內網穿透

&#x1f308; 個人主頁&#xff1a;Zfox_ &#x1f525; 系列專欄&#xff1a;Linux 目錄 一&#xff1a;&#x1f525; NAT 技術背景二&#xff1a;&#x1f525; NAT IP 轉換過程三&#xff1a;&#x1f525; NAPT四&#xff1a;&#x1f525; 代理服務器&#x1f98b; 正向…

[Web 安全] PHP 反序列化漏洞 —— PHP 魔術方法

關注這個專欄的其他相關筆記&#xff1a;[Web 安全] 反序列化漏洞 - 學習筆記-CSDN博客 PHP 魔術方法 - 簡介 - PHP 魔術方法 - 簡單教程&#xff0c;簡單編程PHP 中&#xff0c;以兩個下劃線 ( __ ) 開頭方法稱之為 「 魔術方法 」 這些 「 魔術方法 」 在 [PHP](/l/yufei/php…

20250304在Ubuntu20.04的GUI下格式化exFAT格式的TF卡為ext4格式

20250304在Ubuntu20.04的GUI下格式化exFAT格式的TF卡為ext4格式 2025/3/4 16:47 緣起&#xff1a;128GB的TF卡&#xff0c;只能格式化為NTFS/exFAT/ext4。 在飛凌的OK3588-C下&#xff0c;NTFS格式只讀。 exFAT需要改內核來支持。 現在只剩下ext4了。 linux R4默認不支持exFAT…

跨域問題解釋及前后端解決方案(SpringBoot)

一、問題引出 有時,控制臺出現如下問題。 二、為什么會有跨域 2.1瀏覽器同源策略 瀏覽器的同源策略 &#xff08; Same-origin policy &#xff09;是一種重要的安全機制&#xff0c;用于限制一個源&#xff08; origin &#xff09;的文檔或 腳本如何與另一個源的資源進行…

【NLP 30、文本匹配任務 —— 傳統機器學習算法】

目錄 一、文本匹配任務的定義 1.狹義解釋 2.廣義解釋 二、文本匹配的應用 1.問答對話 2.信息檢索 3.文本匹配任務應用 三、智能問答 1.智能問答的基本思路 依照基礎資源劃分&#xff1a; 依照答案產出方式劃分 依照NLP相關技術劃分 四、智能問答的價值 1.智能客服 2.Faq知識庫問…

開源表單、投票、測評平臺部署教程

填鴨表單聯合寶塔面板深度定制,自寶塔面板 9.2 版本開始,在寶塔面板-軟件商店中可以一鍵部署填鴨表單系統。 簡單操作即可擁有屬于自己的表單問卷系統,快速賦能業務。即使小白用戶也能輕松上手。 社區版體驗地址:https://demo.tduckapp.com/home 前端項目地址: tduck-fro…

Elasticsearch 限制索引大小與索引模板匹配沖突解決方案

文章目錄 背景介紹環境限制索引大小創建 ILM&#xff08;索引生命周期管理&#xff09;策略創建 ILM 策略 創建索引模板并關聯 ILM 策略使用索引模板應用 ILM 策略 解決索引模板匹配沖突? 解決方案&#x1f539; 方案 1&#xff1a;修改 index_patterns&#xff08;推薦&#…

[LeetCode]day33 150.逆波蘭式求表達值 + 239.滑動窗口最大值

逆波蘭式求表達值 題目鏈接 題目描述 給你一個字符串數組 tokens &#xff0c;表示一個根據 逆波蘭表示法 表示的算術表達式。 請你計算該表達式。返回一個表示表達式值的整數。 注意&#xff1a; 有效的算符為 ‘’、‘-’、‘*’ 和 ‘/’ 。 每個操作數&#xff08;運…

論文閱讀筆記:UniFace: Unified Cross-Entropy Loss for Deep Face Recognition

論文閱讀筆記&#xff1a;UniFace: Unified Cross-Entropy Loss for Deep Face Recognition 1 背景2 創新點3 方法3.1 回顧softmax損失3.2 統一交叉熵損失3.3 人臉驗證中的UCE損失3.4 進一步的優化3.4.1 邊際UCE損失3.4.2 平衡BCE損失 4 實驗4.1 消融實驗4.2 和SOTA方法對比 論…

Metal學習筆記七:片元函數

知道如何通過將頂點數據發送到 vertex 函數來渲染三角形、線條和點是一項非常巧妙的技能 — 尤其是因為您能夠使用簡單的單行片段函數為形狀著色。但是&#xff0c;片段著色器能夠執行更多操作。 ? 打開網站 https://shadertoy.com&#xff0c;在那里您會發現大量令人眼花繚亂…

騰訊云 | 微搭低代碼快速開發數據表單應用

如上所示&#xff0c;登錄騰訊云微搭低代碼業務控制臺&#xff0c;開始新創建一個應用&#xff0c;創建應用的方式包括&#xff0c;根據實際的業務需求&#xff0c;從模版列表中選擇一個模板填入數據模型創建新應用&#xff0c;使用微搭組件自主設計數據模型創建新應用&#xf…

儲油自動化革命,網關PROFINET與MODBUS網橋的無縫融合,錦上添花

儲油行業作為能源供應鏈的關鍵環節&#xff0c;其自動化和監控系統的可靠性和效率至關重要。隨著工業4.0的推進&#xff0c;儲油設施越來越多地采用先進的自動化技術以提高安全性、降低成本并優化運營。本案例探討了如何通過使用穩聯技術PROFINET轉MODBUS模塊網關網橋&#xff…

【前端】JavaScript 備忘清單(超級詳細!)

文章目錄 入門介紹打印調試斷點調試數字let 關鍵字const 關鍵字變量字符串算術運算符注釋賦值運算符字符串插值字符串數字Math全局函數 JavaScript 條件操作符邏輯運算符 &&比較運算符邏輯運算符空值合并運算符 ?? if Statement (if 語句)Ternary Operator (三元運算…

Linux cat 命令

cat&#xff08;英文全拼&#xff1a;concatenate&#xff09;命令用于連接文件并打印到標準輸出設備上&#xff0c;它的主要作用是用于查看和連接文件。 使用權限 所有使用者 語法格式 cat [選項] [文件] 參數說明&#xff1a; -n&#xff1a;顯示行號&#xff0c;會在輸…

PARETO PROMPT OPTIMIZATION

題目 帕累托提示優化 論文地址&#xff1a;https://openreview.net/forum?idHGCk5aaSvE 摘要 自然語言迅速優化或及時工程已成為一種強大的技術&#xff0c;可以解鎖大型語言模型&#xff08;LLMS&#xff09;的各種任務的潛力。盡管現有方法主要集中于最大化LLM輸出的單一特…

前端面試題---.onChange() 事件與焦點機制解析

.onChange() 事件與焦點的總結 焦點&#xff08;focus&#xff09; 指的是 當前正在操作的元素&#xff08;如輸入框、按鈕&#xff09;。只有一個元素能同時擁有焦點。 原生 HTML 事件&#xff1a; onchange &#xff08;需要失去焦點才觸發&#xff09; 用戶輸入后&#x…

Nest系列:從環境變量到工程化實踐-2

文章目錄 [toc]一、環境搭建與基礎配置1.1 安裝驗證&#xff08;新增完整示例&#xff09;1.2 多環境配置示例 二、模塊化配置實戰2.1 根模塊高級配置2.2 數據庫模塊專用配置 三、配置獲取最佳實踐3.1 類型安全獲取示例3.2 枚舉工程化示例 四、高級場景示例4.1 動態配置熱更新4…