当前位置: 首页 > news >正文

Qt——文本编辑器中的数据存取

1.QAction被点击之后会产生一个triggered信号

  • 通过信号与槽的机制能够捕捉对QAction对象的操作
  • 项目中可以将多个信号映射到同一个槽函数

2.完善记事本中打开文件、保存文件、另存为功能

在MainWindow.h中加入三个槽函数

public slots: void onFileOpen(); //打开文件槽函数 void onFileSave(); //保存文件槽函数 void onFileSaveAs(); //另存为槽函数

在MainWindowUI.cpp中添加关联代码:

connect(action, SIGNAL(triggered()), this, SLOT(onFileSaveAs()));

新建MainWindowSlots.cpp,实现具体的槽函数:

#include "MainWindow.h" #include <QFileDialog> #include <QDebug> #include <QFile> #include <QMessageBox> #include <QTextStream> void MainWindow::showErorrMessage(QString message){ QMessageBox msg(this); msg.setWindowTitle("Error"); msg.setText(message); msg.setIcon(QMessageBox::Critical); msg.setStandardButtons(QMessageBox::Ok); msg.exec(); } QString MainWindow::showFileDialog(QFileDialog::AcceptMode mode, QString title) { QString ret = ""; QFileDialog fd(this); //创建一个文件对话框对象 QStringList filters; //创建一个字符串列表 filters,用来存储文件过滤器 filters.append("Text Files (*.txt)"); filters.append("All Files (*)"); fd.setWindowTitle(title); //设置文件对话框的标题 fd.setAcceptMode(QFileDialog::AcceptOpen); //设置对话框模式为打开文件 fd.setNameFilters(filters); if( mode == QFileDialog::AcceptOpen ) { fd.setFileMode(QFileDialog::ExistingFile); //设置文件选择模式:只能选择已存在的单个文件 } if( fd.exec() == QFileDialog::Accepted ) //如果用户点击了对话框的 “打开” 按钮 { ret = fd.selectedFiles()[0]; } return ret; } void MainWindow::onFileOpen() { QString path = showFileDialog(QFileDialog::AcceptOpen, "Open"); if( path != "" ) { QFile file(path); //绑定用户选中的第一个文件路径 if( file.open(QIODevice::ReadOnly | QIODevice::Text)) { //把读取到的文件内容显示到编辑器中 mainEditor.setPlainText(QString(file.readAll())); file.close(); m_filePath = path; setWindowTitle("NotePad - [ " + m_filePath + " ]"); } else{ showErorrMessage(QString("open file error! \n\n") + "\"" + path + "\"")); } } } void MainWindow::onFileSave() { if( m_filePath == "" ) { m_filePath = showFileDialog(QFileDialog::AcceptSave, "Save"); } if( m_filePath != "" ) { QFile file(m_filePath); if( file.open(QIODevice::WriteOnly | QIODevice::Text) ) { QTextStream out(&file); out << mainEditor.toPlainText(); file.close(); setWindowTitle("NotePad - [ " + m_filePath + " ]"); } else{ showErorrMessage(QString("Save file error! \n\n") + "\"" + m_filePath + "\""); m_filePath = ""; } } } void MainWindow::onFileSaveAs() { QString path = showFileDialog(QFileDialog::AcceptSave, "Save As"); if( path != "" ) { QFile file(path); if( file.open(QIODevice::WriteOnly | QIODevice::Text) ) { QTextStream out(&file); out << mainEditor.toPlainText(); file.close(); m_filePath = path; setWindowTitle("NotePad - [ " + m_filePath + " ]"); } else{ showErorrMessage(QString("Save file error! \n\n") + "\"" + path + "\""); } } }
http://www.jsqmd.com/news/690046/

相关文章:

  • 删除有序数组中的重复项 II
  • 基于蒙特卡洛模拟与matpower的配电网风险评估软件:考虑电动汽车与新能源不确定性的电压和线...
  • 嵌入式——认识电子元器件——二极管系列
  • 依赖更新自动化:安全漏洞的自动修复与升级
  • 用 Sidecar 模式实现语言无关的 Agent Harness
  • CopyTranslator:科研翻译效率提升500%的秘密武器,3分钟告别PDF格式混乱烦恼
  • 2026届学术党必备的六大降重复率助手实际效果
  • OpenCode 故障排查手册
  • NVIDIA Mamba-Chat模型优化与应用解析
  • 从PCB布线到BIOS设置:硬件工程师实战DDR内存信号完整性分析与调试避坑指南
  • 《jEasyUI 创建树形下拉框》
  • 质数筛的程序
  • AssetRipper完整指南:三步快速提取Unity游戏资源的终极方案
  • 16亿与6亿的惊天差距:法庭上,“审计报告”为何不能代替“司法会计鉴定”?
  • 2026届最火的十大降AI率助手推荐
  • Docker 27原生加密引擎深度解析:如何在容器层硬隔离CT/MRI影像数据,避免零日泄露?
  • 案例真题详解:Redis 主从复制~终于搞懂了
  • MinGW-w64完全指南:Windows C/C++开发环境终极配置教程
  • IC后端CTS入门:为什么大佬们都爱用反相器(Inverter)而不是Buffer来建时钟树?
  • Tailwind CSS 安装(NPM)
  • 新款悄悄偷工减料、改名涨价,这是要玩坏旗舰手机?国内消费者应该感谢苹果!
  • 基于MPC模型预测控制的二阶大延迟系统、m文件实现Simulink仿真
  • 《QGIS快速入门与应用基础》297:多波段影像符号化技巧
  • UE5游戏开发显存选择指南:从独立游戏到3A大作的显卡需求解析
  • 2026辊筒干燥机优质品牌推荐:辊筒刮板干燥机、雪花全粉辊筒干燥机、预糊化淀粉辊筒干燥机、马铃薯全粉加工设备、马铃薯全粉生产线选择指南 - 优质品牌商家
  • 专利资产成熟度认证白皮书解读(六)
  • 别再复制粘贴了!手把手教你用Visual Studio 2019为CANoe 11定制自己的SeedKey.dll
  • 别再死记硬背DH参数了!用Python+Matplotlib手把手教你从零推导机器人正运动学
  • 导航凭什么比你自己认路还准?一个算法讲透
  • 【深度解析】Qwen 3.6 Max Preview 技术全景:MoE 架构、长上下文取舍与 AI Coding Agent 落地实践