Qt文件操作的學習(三)

一、實現簡易文本編輯器

  1. 主要用到帶菜單欄的窗口,而非單一窗口。QT已經寫好相關操作,就不在重新造輪子了
  2. 功能設計:新建文本文檔,打開文件,保存文件,另存為
    在這里插入圖片描述

在這里插入圖片描述


這次不同于之前直接可以在控件上面右擊槽了;而是需要自己手動去進行連接信號與槽
private slots:void newTextAction();               //新建文檔void openTextAction();              //打開文檔void saveTextAction();              //保存文檔void saveAnotherAction();           //文檔另存為//構造函數中,連接信號與槽
connect(ui->new_file_Action, &QAction::triggered, this, &MainWindow::newTextAction);
connect(ui->open_file_Action, &QAction::triggered, this, &MainWindow::openTextAction);
connect(ui->save_file_Action, &QAction::triggered, this, &MainWindow::saveTextAction);
connect(ui->save_another_file_Action, &QAction::triggered, this, &MainWindow::saveAnotherAction);
  • 新建文本文檔:將之前的內容清空
void MainWindow::newTextAction()
{ui->textEdit->clear();this->setWindowTitle("新建文本文檔.txt");
}
  • 打開文檔,讀取里面內容
void MainWindow::openTextAction()
{QString current_path = QCoreApplication::applicationFilePath();             //獲取當前文件路徑QString file_Name = QFileDialog::getOpenFileName(this, tr("打開文件"),current_path,tr("Text files (*.txt *.c *.cpp)"));if(file_Name.isNull()){QMessageBox::warning(this, "警告","請選擇一個文件");}else{QFile file(file_Name);if (!file.open(QIODevice::ReadOnly | QIODevice::Text))return;QTextStream in(&file);QString content = in.readAll();ui->textEdit->setText(content);file.close();//記錄當前路徑m_current_file_path = file_Name;}
}
  • 保存文檔,將編輯框里面的內容寫入文檔中<=============>將內存中的數據持久化到磁盤上
void MainWindow::saveTextAction()
{//如果當前沒有打開文件,那么就另存為if(m_current_file_path.isEmpty()){this->saveAnotherAction();return;}QFile file(m_current_file_path);if(!file.open(QIODevice::WriteOnly | QIODevice::Text)){QMessageBox::warning(this, "錯誤","無法保存文件");return;}QTextStream out(&file);out<<ui->textEdit->toPlainText();file.close();QMessageBox::information(this, "成功","保存文件");
}
  • 和保存功能一樣,不過需要新添選擇新路徑這一項
void MainWindow::saveAnotherAction()
{QString current_path = QCoreApplication::applicationFilePath();             //獲取當前文件路徑QString save_path = QFileDialog::getSaveFileName(this, tr("保存文件"),current_path,tr("Text files (*.txt *.c *.cpp)"));if(save_path.isNull()){QMessageBox::warning(this, "警告","請選擇保存位置");}else{QFile file(save_path);if (!file.open(QIODevice::WriteOnly | QIODevice::Text)){QMessageBox::warning(this, "錯誤", "無法保存文件");return;}QTextStream out(&file);out<<ui->textEdit->toPlainText();file.close();//更新當前路徑m_current_file_path = save_path;//設置標題this->setWindowTitle(QFileInfo(save_path).fileName());QMessageBox::information(this, "成功","保存文件");}
}
  • 實現下快捷鍵操作,需要添加處理按鍵的響應函數
void MainWindow::keyPressEvent(QKeyEvent *event)
{if (event->modifiers() & Qt::ControlModifier){switch(event->key()){case Qt::Key_N: this->newTextAction();  break;case Qt::Key_O: this->openTextAction(); break;case Qt::Key_S:{if(event->modifiers() & Qt::ShiftModifier){this->saveAnotherAction();}else{this->saveTextAction();}break;}default:QMainWindow::keyPressEvent(event);  // 調用基類處理}}else{QMainWindow::keyPressEvent(event);  // 調用基類處理}
}

在這里插入圖片描述

二、問題:

2.1 如果文件過大,比如10個G的txt文件,這樣操作,肯定不行,那怎么辦?

  1. 采用分塊讀取,比如每次讀取4kb
  2. 采用內存映射,將文件的部分內容直接映射到內存當中
    類似數據庫當中的分頁或者瀏覽器,app看小說的滑動欄;實現起來稍微有點復雜,需要記錄上一次以及下一次分塊的內容,方便快速加載出來

Code

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

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

相關文章

ArcGIS學習-20 實戰-縣域水文分析

水文分析任務提取區域內水流方向、匯流累積量、河網、流域、子流域前置操作環境更改加載數據檢查投影坐標系河網分析洼地填充限制默認為空&#xff0c;認為所有洼地都是需要填充的&#xff0c;這里更正一下Fill_DEM需要加上后綴.tif流向分析得到流量分析得到這里的黑色代表非河…

本地 Docker 環境 Solr 配置 SSL 證書

一、簡介 在本地開發環境中為 Solr 配置 SSL 證書,是提升開發與測試一致性的關鍵步驟。尤其是在涉及安全傳輸需求的場景中,本地環境的 HTTPS 配置能有效避免因環境差異導致的問題。本文將詳細介紹如何利用 Docker 容器,快速為 Solr 服務配置自簽名 SSL 證書,實現本地 HTTP…

MacOS 運行CosyVoice

CosyVoic主要特點&#xff1a;1、支持中文、英文、上海話、天津話、四川話等方言。語音非常自然。2、支持3秒語音零樣本克隆&#xff0c;效果非常好。3、克隆時間比較長&#xff08;取決于GPU性能&#xff0c;使用H20以滿足低延遲輸出&#xff09;&#xff0c;L4 克隆默認文本需…

我不是掛王-用python實現燕雙鷹小游戲3

在前兩個版本的更新后,越來越多內容,操作和運行也不方便,優化第三版本窗口可視化界面 本次版本更新使得可讀性和可操作性大幅度增加,前面2版本可分別參考 我不是掛王-用python實現燕雙鷹小游戲 和 我不是掛王-用python實現燕雙鷹小游戲2 一.燕雙鷹窗口可視化(燕雙鷹3.0) 新燕雙…

裝飾(Decorator)模式可以在不修改對象外觀和功能的情況下添加或者刪除對象功能

試題&#xff08;35&#xff09;、&#xff08;36&#xff09;某系統中的文本顯示類&#xff08;TextView&#xff09;和圖片顯示類&#xff08;PictureView&#xff09;都繼承了組件類&#xff08;Component&#xff09;&#xff0c;分別顯示文本和圖片內容&#xff0c;現需要…

深度學習基礎概念【持續更新】

1. 梯度消失如果網絡中某一層的激活函數&#xff08;如 sigmoid 或 tanh&#xff09;在輸入較大的情況下有很小的梯度&#xff08;比如接近零&#xff09;&#xff0c;那么當這些小的梯度通過多層反向傳播時&#xff0c;它們會逐漸變得更小。這意味著在深層網絡的前面幾層&…

上下文工程:AI應用成功的關鍵架構與實踐指南

在AI應用開發中&#xff0c;模型能力只決定性能上限&#xff0c;而上下文質量決定性能下限——上下文工程正是確保AI系統理解用戶意圖、生成準確響應的核心工程技術&#xff0c;已成為區分普通AI應用與卓越AI應用的關鍵因素。一、上下文工程&#xff1a;AI應用的新核心競爭力 1…

數據傳輸優化-異步不阻塞處理增強首屏體驗

背景&#xff1a;主 project 頁面中會將視頻存儲到云端后獲得 ID &#xff0c;然后用 ID 調用 后端API POST到數據庫后拿到掛載頁面URL&#xff0c;接著傳入視頻分享組件&#xff08;由于視頻分享子組件的目標是分享視頻掛載頁面&#xff0c;所以前置步驟不能少&#xff09;con…

【芯片設計-信號完整性 SI 學習 1.0 -- SI 介紹】

文章目錄一、SoC 設計驗證階段的 SI 測試主要工作舉例二、芯片 Bringup 階段的 SI 測試主要工作舉例三、SI-PI 聯合仿真主要內容舉例四、整體總結一、SoC 設計驗證階段的 SI 測試 在 前硅階段&#xff08;pre-silicon&#xff09;&#xff0c;設計團隊需要確保 SoC 與外設接口…

C語言鏈表設計及應用

鏈表鏈表節點設計鏈表項目鏈表中的傳址調用檢查申請空間鏈表尾插鏈表頭插鏈表尾部刪除鏈表頭部刪除鏈表的查找指定位置之前插入指定位置之后插入數據刪除指定位置&#xff08;節點&#xff09;數據刪除指定位置&#xff08;節點&#xff09;之后的數據鏈表的銷毀前面學習了順序…

使用 YAML 自動化 Azure DevOps 管道

1. 在 Azure DevOps 中設置 YAML 管道 開始之前,您需要擁有一個 Azure DevOps 帳戶和一個 git 倉庫。 要創建 YAML 管道, 1. 導航至 Azure DevOps → 選擇您的項目 2. 前往“管道”→ 點擊“新建管道” 3. 選擇您的倉庫(Azure Repos、GitHub 等) 4. 選擇“Starter Pipelin…

基于Spring Boot的幼兒園管理系統

基于Spring Boot的幼兒園管理系統 源碼獲取&#xff1a;https://mbd.pub/o/bread/YZWXlZtsbQ 引言 在數字化轉型的浪潮中&#xff0c;教育行業的信息化建設顯得尤為重要。幼兒園作為基礎教育的重要環節&#xff0c;其管理系統的現代化水平直接關系到教育質量和運營效率。本文…

【NVIDIA-B200】 ‘CUDA driver version is insufficient for CUDA runtime version‘

目錄 一、錯誤核心原因 二、排查步驟 1. 檢查當前驅動版本 2. 檢查 CUDA 運行時版本 3. 驗證驅動與 CUDA 的兼容性 三、解決方法 1. 確保驅動正確加載 2. 重新安裝匹配的驅動與 CUDA 3. 驗證環境正確性 四、關鍵注意事項 報錯日志: bash nccl.sh ------------5.安…

Android中如何實現自動化測試

目錄 前言: 一、方法介紹 1、UI Automator 3、shell腳本 二、shell腳本實現自動化測試原理和步驟 1、 原理 2、步驟 三、shell自動化測試實例 前言: 在開發項目的過程中&#xff0c;我們將某個階段的需求完成并且提測&#xff0c;通常&#xff0c;在測試工程師更細致的測…

綠聯科技全球化突圍:業財一體化如何打通全球電商全鏈路數字化

綠聯科技專注數碼配件20年&#xff0c;產品覆蓋全球100多個國家&#xff0c;年銷售額突破30億。作為"連接"領域的專家&#xff0c;綠聯深知連接的真諦不僅在于硬件產品&#xff0c;更在于數據的全球化連接。在全球電商競爭日益激烈的今天&#xff0c;綠聯率先探索業財…

uv教程 虛擬環境

什么是uv 可以創建虛擬環境 安裝依賴 安裝uv 參見官方文檔 安裝 | uv-zh-cn 自定義安裝目錄,winr 輸入powershell&#xff0c;輸入如下命令 $env:UV_INSTALL_DIR "C:\Custom\Path";powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/inst…

繞過codex在vscode中登錄403的問題

codex安裝&#xff1a; npm i -g openai/codex codex升級&#xff1a; npm install -g openai/codexlatest 繞過codex在vscode中登錄403的問題&#xff1a; https://linux.do/t/topic/924206/4 1.在windows端powelshell登陸好codex&#xff1b; $env:HTTP_PROXY"http://…

軟件研發如何選對方法論?傳統計劃驅動與敏捷價值驅動的全面對比

軟件項目研發中的方法論是一個核心話題,它決定了團隊如何規劃、執行和交付軟件。下面我將對這些方法論進行一個全面的概述,從傳統的到現代的,并說明它們的核心思想、適用場景和趨勢。 一、 方法論的核心分類 軟件研發方法論主要分為兩大陣營:傳統計劃驅動(Plan-Driven)…

【服務器】將本地項目部署到服務器

當我們已經有了一個服務器后 如何將本地項目部署到服務器呢第一步&#xff0c;找到云服務器實例&#xff0c;查看公網IP地址第二步&#xff0c;推薦使用 Windows 自帶的 PowerShell ssh root你的公網IP # 例如&#xff1a; ssh root47.98.123.45如果超時&#xff0c;首先檢查服…

Flink中的 BinaryRowData 以及大小端

背景 本文基于 Flink 1.17.0 寫此文章的目的是為了說明 Flink 堆內和堆外內存以及 內部 BinaryRowData 行處理的優化。 分析 堆內和堆外內存 跟Spark的內存管理不一樣&#xff0c;Flink 中的堆內和堆外一直都是存在的。 堆內內存&#xff08;JVM Heap&#xff09;存儲用戶對象和…