QT文件操作【记事本】

news2025/1/19 3:39:51

主页面

mainwindow.h

核心函数

  • QFileDialog::getOpenFileName()
  • QFileDialog::getSaveFileName()
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include<QFileDialog>
#include<QMessageBox>
#include<QDebug>
#include<QFile>
#include<QKeyEvent>
#include<QMouseEvent>

QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    void keyPressEvent(QKeyEvent *k);//父类虚函数,键盘按下事件
    void mousePressEvent(QMouseEvent *m);//鼠标按下事件
    ~MainWindow();

private:
    Ui::MainWindow *ui;
private slots:
    void newActionSlot();
    void openActionSlot();
    void saveActionSlot();
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->setWindowTitle("记事本");
    //连接函数,谁发出信息,发出什么信号,谁接收信号,执行什么操作
    //自定义三个槽函数,newActionSlot,openActionSlot,saveActionSlot
    connect(ui->newAction,&QAction::triggered,this,&MainWindow::newActionSlot);
    connect(ui->openAction,&QAction::triggered,this,&MainWindow::openActionSlot);
    connect(ui->saveAction,&QAction::triggered,this,&MainWindow::saveActionSlot);
}

MainWindow::~MainWindow()
{
    delete ui;
}
void MainWindow::newActionSlot()
{
//清空内容
    ui->textEdit->clear();
    this->setWindowTitle("新建文本文档.txt");
}
void MainWindow::openActionSlot()
{
//打开文件资源管理窗口,获取选定的文件的路径
    QString filename= QFileDialog::getOpenFileName(this, "打开文件",
                                 QCoreApplication::applicationFilePath(), "*.cpp");
    if(filename.isEmpty())
    {
        QMessageBox::warning(this,"警告","请打开一个文件!");
    }
    else{
        //qDebug() << filename;
        //通过文件路径,构建文件对象
        QFile file(filename);
        //只读方式打开
        file.open(QIODevice::ReadOnly);
        //读取文件中的所有内容到字节数组中
        QByteArray ba = file.readAll();
        //关闭文件对象
        file.close();
       	//将读取的数据存储到textEdit中
        ui->textEdit->setText(QString(ba));

    }
}
void MainWindow::saveActionSlot()
{
//弹出文件资源管理器窗口,选择文件夹。
//QCoreApplication::applicationFilePath()表示当前根目录
    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();
        QMessageBox::about(this,"提示","保存成功");
    }
}

void MainWindow::keyPressEvent(QKeyEvent *k)
{
//键盘按下事件,一个父类的虚函数,能够检测键盘事件。Ctrl+S调用保存函数
    if(k->modifiers()==Qt::ControlModifier&&k->key()==Qt::Key_S)
        saveActionSlot();
}

void MainWindow::mousePressEvent(QMouseEvent *m)
{
    QPoint pt = m->pos();
    qDebug()<<pt;
    if(m->button()==Qt::LeftButton)
        qDebug()<<"左键被按下";
    else if(m->button()==Qt::RightButton)
        qDebug()<<"右键被按下";
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2214139.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Apache Kafka的生态

Kafka 生态系统 微信公众号&#xff1a;阿俊的学习记录空间 小红书&#xff1a;ArnoZhang wordpress&#xff1a;arnozhang1994 博客园&#xff1a;arnozhang CSDN&#xff1a;ArnoZhang1994 以下是与 Kafka 集成的工具列表&#xff0c;涵盖了不同领域的工具和扩展。这些…

Jmeter如何进行多服务器远程测试?

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 JMeter是Apache软件基金会的开源项目&#xff0c;主要来做功能和性能测试&#xff0c;用Java编写。 我们一般都会用JMeter在本地进行测试&#xff0c;但是受到单…

鱼跃医疗荣获深交所信息披露工作“A”级评价

2024年10月11日&#xff0c;深圳证券交易所&#xff08;以下简称“深交所”&#xff09;发布了《关于深市上市公司2023-2024年度信息披露评价结果的通报》&#xff0c;鱼跃医疗&#xff08;002223.SZ&#xff09;凭借在信息披露质量、投资者关系管理等各方面的优异表现&#xf…

总结拓展十四:批次管理(1)

1、批次的概念 批次是指生产或采购过程中&#xff0c;为了区分不同供应商之间相同产品间的微小区别而进行的管理方式。它通常用于确保产品质量的一致性和可追溯性。批次的概念可以应用于多个领域&#xff0c;包括生产、采购、物流、销售等。 2、批次管理的概念 批次管理是指对…

SIC MOS的保护方式

SIC MOS与IGBT短路保护有所不同的原因&#xff1a; 由于SIC MOS芯片尺寸较小(散热能力较差&#xff0c;在短路情况下&#xff0c;浪涌电流会产生大量的热量)&#xff0c;SIC MOS的浪涌能力低于IGBT。SiC MOSFET 和 IGBT 的输出特性不同&#xff0c;在正常导 通状态期间&#x…

【vue3】弹幕效果实现

本次弹幕基于vue3-danmaku组件实现。 弹幕效果 1.安装插件 npm install vue3-danmaku --save 2.基础使用方法 <template><vue-danmaku v-model:danmus"danmus" loop style"height:100px; width:300px;"></vue-danmaku> </templat…

发布自己的python包

文章目录 概要模块和包发布自己的package创建目录结构发布 概要 提示&#xff1a;这里可以添加技术概要 例如&#xff1a; openAI 的 GPT 大模型的发展历程。 模块和包 在Python中&#xff0c;程序的划分可以分为三个层次&#xff1a;脚本、模块和包 script&#xff1a;独…

【人工智能】探索最强AI工具:实际应用与影响

随着人工智能&#xff08;AI&#xff09;技术的迅猛发展&#xff0c;AI工具已经深入到人们日常生活和工作的方方面面。这些工具不仅提高了生产力&#xff0c;还改变了我们解决问题和处理信息的方式。在中文互联网和国际市场中&#xff0c;众多AI工具已成为人们工作、学习、创作…

软考结构化开发 -- (耦合,内聚,设计原则,系统文档,数据字典)

文章目录 一、耦合二、内聚三、设计原则四、系统文档五、数据字典 一、耦合 模块化&#xff1a;将一个待开发的软件分解成若干个小的简单部分–模块模块独立 无直接耦合&#xff1a;指两个模块之间没有直接的关系&#xff0c;它们分别从属于不同模块的控制与调用&#xff0c;…

spring boot itext7 修改生成文档的作者、制作者、标题,并且读取相关的信息。

1、官方的example文件&#xff1a;iText GitHub itext-java-7.2.5\kernel\src\test\java\com\itextpdf\kernel\pdf\PdfStampingTest.java 2、修改代码&#xff1a; Testpublic void stamping1() throws IOException {String filename1 destinationFolder "stamping1_…

特惠电影票API接口的优势功能以及对接因素?

特惠电影票对接接口通常是指允许第三方开发者或平台通过编程方式接入电影票预订服务的API。这些接口可以提供查询电影场次、座位信息、票价、订票、支付等功能。以下是一些关键点和考虑因素&#xff0c;以及一些提供特惠电影票API接口的平台&#xff1a; 关键功能 电影场次信息…

RK3568 4G模块移远 EM05-CE

首先确保4G模块的天线是否正确安装,这一步会影响到后面测试成功与失败,购买模块时可以咨询厂家 然后就可以进行测试,首先需要关闭所有网络设备,以我的开发板为例子,确保等会使用的是4G模块的功能 ifconfig eth0 down ifconfig eth1 down ifconfig eth2 down 然后查看ifc…

java-day7

练习一&#xff1a;飞机票 需求: ​ 机票价格按照淡季旺季、头等舱和经济舱收费、输入机票原价、月份和头等舱或经济舱。 ​ 按照如下规则计算机票价格&#xff1a;旺季&#xff08;5-10月&#xff09;头等舱9折&#xff0c;经济舱8.5折&#xff0c;淡季&#xff08;11月到来…

【Spring相关技术】spring进阶-自定义请求报文转对象HttpMessageConverter

文章目录 类继承体系核心类与接口说明底层调用链完整示例步骤 1: 创建自定义的HttpMessageConverter步骤 2: 配置Spring MVC使用自定义转换器步骤 3: 使用自定义转换器 相关文献 类继承体系 默认转换器即springmvc默认的转换器&#xff0c; 用的比较多的是以下两种&#xff0c;…

生信技能61 - 获取比对后BAM文件的多项基础统计指标

获取比对后BAM文件的多项基础统计指标 1. 运行实例 采用pysam库解析bam文件,将bam文件路径作为输入参数,统计输出比对的参考基因组大小、ATCGN各碱基数量/比率、GC含量、UR reads数量、平均测序深度、总reads数量等统计指标。 python bam_statistics.py -b sample.sorted.…

【Nestjs】从入门到精通(依赖注入)

NestJS 是一个基于 Node.js 的渐进式框架&#xff0c;构建在 Express 或 Fastify 之上&#xff0c;主要用于构建高效、可扩展的服务器端应用程序。它使用 TypeScript 并借鉴了 Angular 的设计理念&#xff0c;采用了依赖注入&#xff08;IoC, Inversion of Control&#xff09;…

动态网站及爬虫技术应用(题目)

/*T26:HTTP响应消息的状态代码为500时表示&#xff08; &#xff09;: HTTP响应消息的状态代码为500时表示服务器内部错误&#xff08;Internal Server Error&#xff09;。这通常意味着服务器在处理请求时遇到了意外的情况&#xff0c;导致无法完成该请求。这种错误可能是由于…

操作系统Lesson - 5 进程简介及进程编程模型

文章目录 什么是进程同一程序如何并发&#xff1f; Linux进程常用命令proc目录 PCB进程控制块PCB包含的信息两个进程间的关系 进程编程exec() 替换函数子进程的运行过程 什么是进程 进程 程序运行的过程&#xff0c;系统进行资源管理和调度的独立单位。 程序由两部分组成&am…

基础入门-Web应用架构搭建漏洞HTTP数据包

网站搭建 这里给一个网站搭建的视频链接&#xff0c;之前又搞过搭建服务器&#xff0c;这里就不再重做了 https://www.bilibili.com/video/BV16A4y1X7vg/?spm_id_from333.337.search-card.all.click&vd_sourcec2c3c616b3ad1faf44a9f6f30a4dbb03 值得注意的是&#xff0c;…

网络通信与并发编程(二)基于tcp的套接字、基于udp的套接字、粘包现象

基于tcp的套接字 文章目录 基于tcp的套接字一、套接字的工作流程二、基于tcp的套接字通信三、基于udp的套接字通信四、粘包现象 一、套接字的工作流程 Socket是应用层与TCP/IP协议族通信的中间软件抽象层&#xff0c;它是一组接口。在设计模式中&#xff0c;Socket其实就是一个…