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

【Qt】文件操作/事件--mainwindow做编辑器

文件操作

1.找到文件位置:

返回一个文件的绝对路径=QFileDialog::getOpenFileName(父类对象,框名,显示的路径, 显示的文件的类型)

QString fileName = QFileDialog::getOpenFileName(this,"打开",QCoreApplication::applicationFilePath(),"*.cpp");

2.创建文件对象

 QFile file(fileName)

3.打开文件

file.open(QIODevice::打开方式);

4.操作

        读文件: QByteArray类写道的位置 = file.readAll(文件对象)

        写文件:file.write(写的内容);

5.关闭文件

file.close();

做编辑器

做一个有新建、打开、保存功能的文本编辑器。

UI部分

 mainwindow的UI部分,比widget多一个在这里输入(菜单栏部分)

快捷键预览UI:alt+shift+r

拖一个text edit选垂直布局,自动占满:

菜单栏下拉:&+字母

下拉这里的操作不能直接右键转到槽,所以需要在代码中自己写connect,连接信号与槽。

mainwindow.h

声明槽函数(新建、打开、保存)。

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include<QFileDialog>
#include<QMessageBox>
#include<QDebug>
#include<QFile>
QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void newActionSlot();//处理new的槽函数void openActionSlot();void saveActionSlot();
private:Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

mainwindow.cpp

手动连接槽函数:

&QAction::triggered是单击信号

connect(ui->action_N,&QAction::triggered,this,&MainWindow::newActionSlot);
connect(ui->action_O,&QAction::triggered,this,&MainWindow::openActionSlot);
connect(ui->action_S,&QAction::triggered,this,&MainWindow::saveActionSlot);

新建槽

清空当前ui,原始名叫新建文本文档.txt

void MainWindow::newActionSlot()
{ui->textEdit->clear();//清空当前的编辑部分this->setWindowTitle("新建文本文档.txt");//ui框叫新建文本文档.txt
}

打开槽(读文件)

取文件地址

如果为空:

        警告warning没取到

否则:

        打开文件file,

        打开方式

        读文件信息到ba

        写ba到ui中

        关闭文件

void MainWindow::openActionSlot()
{//打开一个选文件的框QString fileName = QFileDialog::getOpenFileName(this,"打开",QCoreApplication::applicationFilePath(),"*.cpp");if(fileName.isEmpty())//返回空则没选到文件{QMessageBox::warning(this,"警告","请选择一个文件");}else{QFile file(fileName);//创建文件对象file.open(QIODevice::ReadOnly);//只读打开文件QByteArray ba = file.readAll();//读取文件信息,存到ba里面ui->textEdit->setText(QString(ba));//在UI中的textEdit中显示文本ba中的内容file.close();}
}

保存槽

取文件地址filename

如果为空:

        警告

否则:

        打开(filename)的文件file

        在ui框里面写的追加到ba

        file写ba

        关闭文件

void MainWindow::saveActionSlot()
{QString fileName = QFileDialog::getSaveFileName(this,"选择一个文件",QCoreApplication::applicationFilePath());if(fileName.isEmpty()){QMessageBox::warning(this,"警告","请选择一个文件");}else{//得到文件地址,打开方式QFile file(fileName);file.open(QIODevice::WriteOnly);QByteArray ba;ba.append(ui->textEdit->toPlainText().toUtf8());file.write(ba);file.close();}
}

事件

键盘、鼠标、拖放、滚轮、绘屏、定时……都是事件

QMouseEvent(鼠标事件)、QKeyEvent(键盘事件)、QResizeEvent(窗口大小变化事件)等,均继承自基类 QEvent

常见的事件

  1. 鼠标事件(QMouseEvent)

    鼠标按下(mousePressEvent)、释放(mouseReleaseEvent)、移动(mouseMoveEvent)、双击(mouseDoubleClickEvent)等。
  2. 键盘事件(QKeyEvent)

    按键按下(keyPressEvent)、释放(keyReleaseEvent),可获取按键值(如 Qt::Key_Enter)。
  3. 窗口事件(QResizeEvent、QMoveEvent 等)

    窗口大小变化(resizeEvent)、位置移动(moveEvent)、关闭(closeEvent)等。
  4. 定时器事件(QTimerEvent)

    通过 startTimer(interval) 启动定时器,定时触发 timerEvent
  5. 绘图事件(QPaintEvent)

    窗口需要重绘时触发(如被遮挡后显示),需在 paintEvent 中实现绘图逻辑(配合 QPainter)。
  6. 拖放事件(QDragEnterEvent、QDropEvent 等)

    处理拖放操作,需开启控件的 setAcceptDrops(true)

重写事件处理函数可以自定义事件处理方法。

例:写ctrl+s保存快捷键

键盘事件的头文件:<QKeyEvent>

键盘按下事件:

//声明
void keyPressEvent(QKeyEvent *K);
//定义
void MainWindow::keyPressEvent(QKeyEvent *k)
{//同时按下ctrl+Sif(k->modifiers() == Qt::ControlModifier && k->key()==Qt::Key_S){//保存文件的槽函数处理saveActionSlot();}
}
http://www.dtcms.com/a/515283.html

相关文章:

  • 高频低客单价产品怎么做私域?餐饮/生鲜/零售用社群运营提效37%的私域代运营方案
  • 石家庄大型网站建设做it题的网站
  • 网站建设 要维护么重庆做汉堡的餐饮公司网站
  • leetcode单链表反转
  • 【英语】listicles 是什么意思?
  • JSA变成类似vba环境给第三方软件集成IDE功能,脚本功能
  • 做外单网站亚马逊wordpress菜单分开
  • [ Java 反射机制 ]
  • 元宇宙与医疗健康的深度融合:重构诊疗、培训与健康管理新生态
  • 《算法闯关指南:优选算法--二分查找》--21.山峰数组的的峰顶索引,22.寻找峰值
  • h5游戏免费下载:弗莱迪的物理实验
  • C++ 学习 —— 03 - 类
  • 元宇宙与金融的深度融合:重构服务生态与价值边界
  • 用js做的网站页面设计理念万能模板
  • 做音乐网站的目的在线画画网站
  • 【C语言】两个字符串的相似度检查
  • 从零搭建 RAG 智能问答系统 4:从多模态架构到 Milvus 向量存储实践
  • WVP国标级联(GB/T 28181)完整搭建指南:环境准备与实战配置
  • Topaz Video AI for Mac AI视频无损放大 视频画质增强
  • 什么是组网架构
  • 讲一下elastic search 的分词原理
  • 玩转 Go 表达式引擎:expr 实战指南
  • 【IO多路转接】高并发服务器实战:Reactor 框架与 Epoll 机制的封装与设计逻辑
  • 企业网站建设毕业设计论文龙岗网站建设开发设计公司
  • 力扣热题100道之238除自身以外数组的乘积
  • 把AI装进OS、批量落地智慧服务,智能手机革命2.0来了
  • 防爆手机可以通过普通智能手机改装吗?
  • 宇树H2仿生机器人登场
  • 语音识别技术之FireRedASR
  • 有什么指标可以判断手机是否降频